2013-01-08 37 views
53

我有一個看起來像這樣的實體:Symfony2和Doctrine - 錯誤:PathExpression無效。必須是一個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(); 

不過,我收到以下錯誤:

​​

如何從我的表中選擇parent_id字段。我已經嘗試了一堆的變化,即使我做這樣的事情:

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

我得到的所有字段的表除了的PARENT_ID。這似乎像教條正在阻礙。我如何查詢這個parent_id字段?或更好,但我怎麼能得到所有領域在表中包括PARENT_ID

回答

156

你可以使用目前的無證IDENTITY功能在查詢中選擇FK編號:

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

謝謝soooooo多! – Matheno

9

解決方案使用createQueryBuilder :

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

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

您正在選擇一個未加入的對象。 置身於另一個回答說,你必須做一些事情,如:

qb->innerJoin("c.parent", "p") 
相關問題