Symfony2 और Doctrine - त्रुटि: अमान्य PathExpression। एक StateFieldPathExpression होना चाहिए


91

मेरी एक संस्था है जो इस तरह दिखती है:

/**
 * @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. 

मैं अपनी तालिका से पेरेंट_ड फ़ील्ड का चयन कैसे कर सकता हूं। मैंने विविधताओं की एक गुच्छा कोशिश की है और भले ही मैं ऐसा कुछ करूं:

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

मुझे पेरेंट_ड को छोड़कर टेबल में सभी फ़ील्ड मिलते हैं । ऐसा लगता है कि डॉक्ट्रिन रास्ते में मिल रही है। मैं इस parent_id फ़ील्ड के लिए क्वेरी कैसे कर सकता हूं? या बेहतर है फिर भी मैं माता-पिता सहित तालिका में सभी फ़ील्ड कैसे प्राप्त कर सकता हूं

जवाबों:


232

IDENTITYकिसी क्वेरी में FK ID का चयन करने के लिए आप वर्तमान में अवांछित फ़ंक्शन का उपयोग कर सकते हैं :

SELECT IDENTITY(c.parent) ...


7
आप सर, बस मेरा दिन बचा लिया!
फ्लू

1
यह उस निकाय के लिए fk id देता है। आप उस इकाई को कैसे बनाएंगे? $query->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);(डिफ़ॉल्ट पैरामीटर) स्पष्ट रूप से पहचान फ़ंक्शन द्वारा ओवरराइड किया जाता है।
एगमैटर्स

धन्यवाद, कि आखिरकार मुझे मेरी SELECT IN (SELECT) बनाने में मदद मिली!
इमबैंकबैंक

4
क्वेरी बिल्डर का उपयोग करते समय यह भी काम करता है $qb->select('identity(c.parent)'):।
2

12

CreateQueryBuilder का उपयोग कर समाधान:

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

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

5

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

qb->innerJoin("c.parent", "p")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.