2012-08-11 11 views
5

Ich bin neu in der Symfony2 Query Builder, hier ist das, was ich tue:Fehler: Ungültiger PathExpression. Muss ein StateFieldPathExpression sein

$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; 
      } 
     ));  

Es funktioniert gut, außer ich von container meine Einheiten bestellen möchten (das ist ein Beziehungsfeld ist, FK).

Wenn ich diese Zeile hinzu:

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

ich Fehler: Ungültige PathExpression. Muss eine StateFieldPathExpression sein.

Also was ist das - ich kann das Relation-Feld containerType in meiner Where-Klausel, aber nicht in meiner Sortierklausel verwenden? Oder vermisse ich etwas anderes?

Antwort

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; 
} 

Sie können containerType nicht mit sort-Klausel verwenden, da dies eine Entität in Bezug auf die aktuelle! Der Abfrage-Generator kennt das zu verwendende Feld nicht (sogar containerType repräsentiert die ID der Entität!). Sie müssen also die Entität beitreten und nach ihrem Feld manuell sortieren!

+0

Ja, aber Sortieren nach dem fk würde in diesem Fall tun, aber offensichtlich kann ich nicht. Ich fand es einfach seltsam, dass ich es in der Where-Klausel ohne Join, aber nicht in der Art verwenden kann. Danke aber, werde es versuchen. –

Verwandte Themen