2013-01-08 26 views
53

मैं एक इकाई है कि इस तरह दिखता है:सिम्फनी 2 और सिद्धांत - त्रुटि: अमान्य पथएक्सप्रेस। एक StateFieldPathExpression होना चाहिए

/** 
* @Gedmo\Tree(type="nested") 
* @ORM\Table(name="categories") 
* @ORM\Entity() 
*/ 
class Category extends BaseCategory 
{ 

    /** 
    * @ORM\OneToMany(targetEntity="Category", mappedBy="parent") 
    */ 
    protected $children; 

    /** 
    * @Gedmo\TreeParent 
    * @ORM\ManyToOne(targetEntity="Category", inversedBy="children") 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="SET NULL") 
    */ 
    protected $parent; 

} 

और मैं इस तरह एक क्वेरी चलाने के लिए कोशिश कर रहा हूँ:

$qb = $this->em->createQueryBuilder() 
      ->select('c.parent') 
      ->from('Category', 'c'); 

$result = $qb->getQuery()->getArrayResult(); 

हालांकि, मैं निम्न त्रुटि हो रही है:

[Semantical Error] ... Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

मैं अपनी तालिका से parent_id फ़ील्ड का चयन कैसे कर सकता हूं। मैं रूपों का एक गुच्छा की कोशिश की है और यहां तक ​​कि अगर मैं कुछ इस तरह करते हैं: मैं PARENT_ID के लिए छोड़कर तालिका में सभी क्षेत्रों मिल

$qb = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('Category', 'c'); 

। ऐसा लगता है जैसे सिद्धांत चल रहा है। मैं इस parent_id फ़ील्ड के लिए क्वेरी कैसे कर सकता हूं? या बेहतर अभी तक मैं कैसे सभीPARENT_ID सहित सारणी के कोष्ठकों प्राप्त कर सकते हैं

उत्तर

156

आप एक प्रश्न में FK आईडी चुनने के लिए वर्तमान में undocumented IDENTITY फ़ंक्शन का उपयोग कर सकते हैं: createQueryBuilder का उपयोग कर

SELECT IDENTITY(c.parent) ... 
+3

बस पाया यह http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql में दर्ज है: की तरह एक और जवाब में कहा, आप की तरह कुछ करने के लिए -doctrine-query-language.html – alex88

+3

आप महोदय, बस मेरे दिन को बचाया! – flu

+1

बहुत बहुत धन्यवाद! – Matheno

9

समाधान :

$query->SELECT('pa.id') 
     ->from('Category', 'ca'); 
$query->join('ca.parent', 'pa'); 

$result = $query->getQuery()->getArrayResult(); 
4

आप एक ऐसी वस्तु का चयन कर रहे हैं जो शामिल नहीं है।

qb->innerJoin("c.parent", "p")