別のエンティティとの双方向の 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 のマニュアル$shelf->books->add($book)
では、関連付けを手動で同期するために使用できることが示唆されていますが、最初は本がないため、メソッドを呼び出すことはできません$shelf->books
。NULL
新しく作成された関連付けられたエンティティを含めるために、Doctrine に関連付けをリロードさせるにはどうすればよいですか?
(関連: 「ドクトリンとリフレッシュされていない関係」 )