如何使Doctrine刷新/重新同步双向实体关联?
问题描述:
我有了与另一个实体双向多对一/一对多关系的实体:如何使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->books
是NULL
,我不能调用它的任何方法。
我该如何让Doctrine重新加载关联以包含新创建的关联实体?
答
而且后来我才发现,在同样的教义手册我挂告诉我的属性设置为在构造一个ArrayCollection,excatly从而使$shelf->books->add($book)
确实工作。那就是:
public function __construct() {
$this->books = new \Doctrine\Common\Collections\ArrayCollection();
}
笨我。我会在这里发布答案,以防其他人碰巧找到同样的问题,只是很愚蠢。我想这不太可能。