我有一个与另一个实体具有双向ManyToOne / OneToMany关系的实体:
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重新加载关联以包含新创建的关联实体?
答案 0 :(得分:1)
正如我后来注意到的那样,我链接的非常相同的 Doctrine手册告诉我在构造函数中将属性设置为ArrayCollection,以便$shelf->books->add($book)
执行工作。那就是:
public function __construct() {
$this->books = new \Doctrine\Common\Collections\ArrayCollection();
}
愚蠢的我。我会在这里发布答案,以防其他人碰巧在寻找同样的问题之后,就像愚蠢一样。我想这不太可能。