2013-07-26 8 views
13

Sto utilizzando il seguente codice nel costruttore di query , per selezionare una media di valori di punteggio e l'entità di categoria a cui appartiene tale media :Doctrine: impossibile selezionare l'entità tramite le variabili di identificazione senza scegliere almeno un alias di entità radice

$queryBuilder = $this->createQueryBuilder('s') 
    ->resetDQLPart('select') 
    ->select('AVG(s.score) as score, partial c.{reviewCategoryID} as cat') 
    ->setParameter('status', ReviewStatusType::ACCEPTED) 
    ->join('s.review', 'r') 
    ->join('s.category', 'c') 
    ->where('r.campsite = :campsite') 
    ->andWhere('r.status = :status') 
    ->setParameter('campsite', $campsite) 
    ->groupBy('c.reviewCategoryID'); 

$campsite è un'entità a cui appartiene una revisione, mentre i punteggi appartenere ad una revisione, e segna avere una categoria.

Ma quando provo ad eseguire questo, ottengo l'errore

Error: Cannot select entity through identification variables without choosing at least one root entity alias. 

Quando il debug e controllare gli alias di root, vedo che 's' è definito, che è dovrebbe essere l'entità root (Punto).

Qualche idea di cosa potrebbe essere sbagliato?

risposta

11

createQueryBuilder() può prendere un parametro solo quando viene chiamato dal repository dell'entità corrispondente. Nel caso in cui non lo chiami da questo repository dovresti definire un metodo from.

Passare un parametro a createQueryBuilder() è comunque per convenzione. Puoi sempre definirlo manualmente. La funzione è simile a questa (solo all'interno del repository dell'entità):

public function createQueryBuilder($alias) 
{ 
    return $this->_em->createQueryBuilder() 
     ->select($alias) 
     ->from($this->_entityName, $alias); 
} 
Problemi correlati