2012-08-11 31 views
5

Jestem nowy konstruktora zapytań Symfony2, tutaj jest to, co robię:Błąd: Niepoprawna metoda PathExpression. Musi być 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; 
      } 
     ));  

Współpracuje z wyjątkiem chcę zamówić moje podmioty przez CONTAINERTYPE (co jest relacyjna pole, FK).

Kiedy dodać ten wiersz:

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

otrzymuję błąd: Nieprawidłowy PathExpression. Musi to być StateFieldPathExpression.

Co to jest - mogę użyć pola relations containerType w mojej klauzuli where, ale nie w mojej klauzuli sort? Czy może brakuje mi czegoś innego?

Odpowiedz

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

Nie można używać metody containerType z klauzulą ​​sortowania, ponieważ jest to obiekt związany z bieżącym! Kreator zapytań nie zna pola do użycia (nawet containerType reprezentuje identyfikator obiektu!). Musisz więc dołączyć do encji i sortować według jej pola ręcznie!

+0

Tak, ale sortowanie według tego fk byłoby w tym przypadku, ale oczywiście nie mogę. Po prostu dziwne, że pozwoli mi użyć go w klauzuli where, bez sprzężenia, ale nie w tym rodzaju. Dzięki, spróbuję. –

Powiązane problemy