我使用下面的代碼在我的模型學說2 - 雙向自引用一對多關係不工作
/**
* Many Categories have One Category
* @ORM\ManyToOne(targetEntity="ItemCategory", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
public $parent;
/**
* One Category has many Categories
* @ORM\OneToMany(targetEntity="ItemCategory", mappedBy="parent")
*/
public $children;
/**
* ItemCategory constructor.
*/
public function __construct()
{
$this->children = new \Doctrine\Common\Collections\ArrayCollection();
$this->parent_id = 0;
}
/**
* @return ItemCategory
*/
public function getParent()
{
return $this->parent;
}
/**
* @param mixed $parent
*/
public function setParent($parent)
{
$this->parent = $parent;
}
/**
* @return ArrayCollection
*/
public function getChildren()
{
return $this->children;
}
我用這與實體管理器,以獲得資源庫和使用的findAll()來獲取在返回公共屬性的json的控制器上使用的所有結果。
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository("AppBundle:Item\ItemCategory");
$categories = $repository->findAll();
return new JsonResponse(array("item_categories" => $categories));
Symfony沒有拋出任何錯誤,而ManyToOne方面沒有問題,並且使用完整對象來表達父屬性。
OneToMany方面雖然我試過,但仍然是空的。
結果數組包含看起來像
{ "id": 8, "parent": { "id": 3, "parent": null, "children": {}, "name": "Ανταλλακτικά", "description": "", "meta_description": "", "icon": "cogs" }, "children": {}, "name": "Ποδηλάτων", "description": "", "meta_description": "", "icon": "" },
我尋覓了很多在這裏stackexchange和文檔上的對象,但我能找到什麼工作的。
我希望再次看看我的代碼,以防萬一我失去了一些明顯的東西。感謝您的時間
=========== UPDATE ==================
經過一番更多的調查,看來爲兒童返回的對象是PersistentCollection。 這意味着我必須執行
$ item-> getChildren() - > GetValues();
獲得實際的孩子
我如何能避免這一點,對房地產直接獲取值有什麼想法?可能與EAGER設置的獲取模式有關?
實驗? –
感謝您的回覆。我實際上必須執行 $ item-> getChildren() - > GetValues(); 得到數組 – Dimitris
這聽起來像是問題;除非我很瘋狂,否則你會想要一個'DoctrineCollection'而不是從該getter返回的'array' ... –