2012-08-11 35 views
5

Tôi mới vào xây dựng truy vấn Symfony2, đây là những gì tôi làm:Lỗi: Đường dẫn không hợp lệ. Phải là một 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; 
      } 
     ));  

Nó hoạt động tốt, ngoại trừ tôi muốn đặt hàng đơn vị của tôi bằng cách containerType (đó là một lĩnh vực quan hệ, FK).

Khi tôi thêm dòng này:

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

tôi nhận được Lỗi: PathExpression không hợp lệ. Phải là StateFieldPathExpression.

Vì vậy, điều này là gì - tôi có thể sử dụng trường mối quan hệ containerType trong mệnh đề where của tôi nhưng không phải trong mệnh đề sắp xếp của tôi? Hay tôi còn thiếu cái gì khác?

Trả lời

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

Bạn không thể sử dụng containerType với mệnh đề sắp xếp vì đây là thực thể có liên quan đến hiện tại! Trình tạo truy vấn không biết trường để sử dụng (ngay cả khi containerType đại diện cho id của thực thể!). Vì vậy, bạn cần phải tham gia thực thể và sắp xếp theo trường của nó theo cách thủ công!

+0

Có, nhưng sắp xếp theo fk đó sẽ làm trong trường hợp này, nhưng rõ ràng là tôi không thể. Chỉ cần tìm thấy nó lạ rằng nó sẽ cho phép tôi sử dụng nó trong mệnh đề where mà không tham gia, nhưng không phải trong sắp xếp. Cảm ơn mặc dù, sẽ thử nó. –

Các vấn đề liên quan