2012-08-11 10 views
5

olmalı benim yaptığım:Hata: Geçersiz PathExpression. Ben burada Symfony2'nin sorgu oluşturucu için yeni bir 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; 
      } 
     ));  

I (ilişkisel alan FK olan) containerType benim varlıkları sipariş etmek istiyorum dışında iyi çalışır. Ben bu satırı eklediğinizde

:

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

Hata alıyorum: Geçersiz PathExpression. Bir StateFieldPathExpression olmalı.

Peki bu nedir? - türküme göre containerType ilişki alanını kullanabilirim, ancak sıralama metnimde kullanmıyorum? Yoksa başka bir şey mi özlüyorum?

cevap

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

ContainerType'ı sort yan tümce ile kullanamazsınız çünkü bu, geçerli ile ilişkili bir varlıktır! Sorgu oluşturucu, kullanılacak alanı bilmez (containerType bile öğenin kimliğini temsil eder!). Bu nedenle, varlığa katılmanız ve kendi alanıyla el ile sıralamanız gerekiyor!

+0

Evet, ancak bu durumda bu fk ile sıralama yapmak, ancak açıkçası yapamam. Sadece bir araya gelmeden, ancak tür içinde değil, bu maddede kullanmama izin vermesi garip geldi. Teşekkürler, ama deneyecek. –