2013-04-30 95 views
1

我有了與另一個實體雙向多對一/一對多關係的實體:如何使Doctrine刷新/重新同步雙向實體關聯?

class BookShelf { 
    /** 
    * @OneToMany(targetEntity="Book", mappedBy="shelf", cascade={"persist"}) 
    */ 
public $books; 
} 
class Book { 
    /** 
    * @ManyToOne(targetEntity="BookShelf", inversedBy="books", cascade={"persist"}) 
    */ 
public $shelf; 
} 

我試圖創建一個新的書,有對象的書架上市。

$book = new Book(); 
$book->shelf = $shelf; 
$em->persist($book); $em->flush(); 
$shelf->showBooks(); 

之後,$shelf->books不包含的書,而是它包含NULL。但是,本書已正確插入到數據庫中,並且當我在另一頁面上運行$shelf->showBooks()時,該書已正確列出。

我試着加入$em->refresh($book)$em->refresh($shelf)但它沒有幫助,關聯仍然沒有刷新。

Doctrine manual does suggest,我可以用$shelf->books->add($book)手動同步的關聯,但由於最初沒有書籍,$shelf->booksNULL,我不能調用它的任何方法。

我該如何讓Doctrine重新加載關聯以包含新創建的關聯實體?

(相關:"Doctrine and unrefreshed relationships"

回答

0

而且後來我才發現,在同樣的教義手冊我掛告訴我的屬性設置爲在構造一個ArrayCollection,excatly從而使$shelf->books->add($book)確實工作。那就是:

public function __construct() { 
    $this->books = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

笨我。我會在這裏發佈答案,以防其他人碰巧找到同樣的問題,只是很愚蠢。我想這不太可能。