2012-08-11 16 views
5

होना चाहिए मैं, यहाँ Symfony2 क्वेरी बिल्डर के लिए नया हूँ कि मुझे क्या करना है:त्रुटि: अमान्य PathExpression। एक 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; 
      } 
     ));  

यह ठीक काम करता है को छोड़कर मैं containerType द्वारा मेरी संस्थाओं ऑर्डर करने के लिए (जो एक संबंधपरक क्षेत्र, FK है)।

जब मैं इस पंक्ति जोड़ें:

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

मैं त्रुटि मिलती है: अमान्य PathExpression। एक राज्य फ़ील्डपाथएक्सप्रेस होना चाहिए।

तो यह क्या है - मैं अपने क्षेत्र में रिलेशन फ़ील्ड कंटेनर टाइप का उपयोग कर सकता हूं लेकिन मेरे सॉर्ट क्लॉज में नहीं? या मैं कुछ और याद कर रहा हूँ?

उत्तर

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

आप कंटेनर टाइप का उपयोग सॉर्ट क्लॉज के साथ नहीं कर सकते क्योंकि यह वर्तमान के संबंध में एक इकाई है! क्वेरी बिल्डर का उपयोग करने के लिए फ़ील्ड को नहीं पता (यहां तक ​​कि कंटेनर टाइप इकाई की आईडी का प्रतिनिधित्व करता है!)। तो आपको इकाई में शामिल होने और मैन्युअल रूप से अपने क्षेत्र द्वारा क्रमबद्ध करने की आवश्यकता है!

+0

हां, लेकिन उस मामले में सॉर्टिंग इस मामले में करेगी, लेकिन स्पष्ट रूप से मैं नहीं कर सकता। बस यह अजीब लगा कि यह मुझे उस खंड में उपयोग करने देगा जहां बिना शामिल किए गए खंड, लेकिन इस तरह से नहीं। धन्यवाद हालांकि, कोशिश करेंगे। –

संबंधित मुद्दे