2012-08-11 13 views
5

Sono nuovo al generatore di query Symfony2, qui è quello che faccio:Errore: PathExpression non valido. Deve essere uno StateFieldPathExpression

$builder 
     ->add('access', 'entity', array(
      'label' => 'Behörigheter', 
      'multiple' => true, // Multiple selection allowed 
      'expanded' => true, // Render as checkboxes 
      'property' => 'name', // Assuming that the entity has a "name" property 
      'class' => 'BizTV\ContainerManagementBundle\Entity\Container', 
      'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) { 
       $qb = $er->createQueryBuilder('a'); 
       $qb->where('a.containerType IN (:containers)', 'a.company = :company'); 
       $qb->setParameters(array('containers' => array(1,2,3,4), 'company' => $company)); 

       return $qb; 
      } 
     ));  

Funziona bene, tranne che voglio ordinare i miei soggetti da containerType (che è un campo relazionale, FK).

Quando aggiungo questa linea:

$qb->orderBy('a.containerType', 'ASC'); 

ottengo l'errore: PathExpression non valido. Deve essere un'espressione StateFieldPathExpression.

Quindi, cos'è questo: posso utilizzare il campo di relazione containerType nella mia clausola where, ma non nella mia clausola sort? O mi manca qualcos'altro?

risposta

6
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) { 
     $qb = $er->createQueryBuilder('a'); 
     $qb->innerJoin('a.containerType', 'ct'); 
     $qb->where('a.containerType IN (:containers)', 'a.company = :company'); 
     $qb->orderBy('ct.id', 'ASC'); // Or the field you want from containerType 
     $qb->setParameters(array('containers' => array(1,2,3,4), 'company' => $company)); 

     return $qb; 
} 

Non è possibile utilizzare containerType con la clausola sort perché si tratta di un'entità in relazione con la corrente! Il generatore di query non conosce il campo da utilizzare (anche containerType rappresenta l'id dell'entità!). Quindi devi unirti all'entità e ordinare il suo campo manualmente!

+0

Sì, ma l'ordinamento da parte di fk sarebbe in questo caso, ma ovviamente non posso. Ho appena trovato strano che mi consenta di usarlo nella clausola where senza join, ma non nel tipo. Grazie però, ci proverò. –

Problemi correlati