在我的'主題'實體中,我有一對多自引用關係$parent:$children
。Doctrine2一對多,自我引用關係
class Topic
{
/** @ORM\Id
* @Column(type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/** @Column(length=40, unique=true) */
private $name;
/**
* @ORM\ManyToOne(targetEntity="Topic", inversedBy="children")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Topic", mappedBy="parent")
*/
private $children;
}
我可以加入該表到拿到父子層次結構是這樣的:
return $this->getEntityManager()->createQuery('
SELECT t, c FROM My\xxxBundle\Entity\Topic t
LEFT JOIN t.children c
WHERE t.parent IS NULL
')
->getArrayResult();
這裏是正確的輸出:
array
0 =>
array
'id' => int 1
'name' => string 'Parent 1'
'slug' => string 'p-1'
'description' => null
'children' =>
array
0 =>
array
'id' => int 2
'name' => string 'Child 1-1'
'slug' => string 'c-1-1'
'description' => null
1 =>
array
'id' => int 3
'name' => string 'Child 1-2'
'slug' => string 'c-1-2'
'description' => null
1 =>
array
'id' => int 4
'name' => string 'Parent 2'
'slug' => string 'p-2'
'description' => null
'children' =>
array
empty
...
,但如果我嘗試獲取特定列SELECT語句:
SELECT t.name, c.name FROM My\xxxBundle\Entity\Topic t
我得到一個扁平的子實體,即只有c.name
。如果父母有沒有孩子,我只是得到了它的名字空值:
1 =>
array (size=1)
'name' => string 'Child 1-1' (length=14)
2 =>
array (size=1)
'name' => string 'Child 1-2' (length=14)
3 =>
array (size=1)
'name' => null
4 =>
array (size=1)
'name' => string 'Child 3-1' (length=5)
馬克的建議,我已經改名爲孩子實體的名稱字段:
SELECT t.name, c.name AS child_name FROM My\xxxBundle\Entity\Topic t
,但我仍然得到錯誤的格式:
array
0 =>
array
'name' => string 'Parent 1'
'child_name' => string 'Child 1-1'
1 =>
array
'name' => string 'Parent 1'
'child_name' => string 'Child 1-2'
2 =>
array
'name' => string 'Parent 2'
'child_name' => string 'Child 2-1'
我仍然得到錯誤的數組格式。我編輯了我的問題以添加更多結果 – qais
嘗試按我在編輯的答案中描述的部分 – Mark
現在可以使用。謝謝馬克 – qais