当两个灯具相互依赖加载时,如何控制灯具加载的顺序?
我的架构有一个Book实体,一个Author实体和一个BookAuthor实体。书籍可以有很多作者,BookAuthor是必需的,因为它有一个名为“main”的附加字段,表明作者是否是该书的主要作者。
在BookFixtures中,我引用了BookAuthorFixtures:
$book1->addBookAuthor($manager->merge($this->getReference('book-author-1')));
在BookAuthorFixtures中,我引用了BookFixtures:
$bookAuthor1->setBook($manager->merge($this->getReference('book-1')));
必须首先加载其中一个灯具,这意味着它引用的灯具是未定义的索引。
有解决这个问题的技巧吗?
此question解决了几乎相同的问题,但配置不同,尽管已接受答案,但问题仍未得到解决。
答案 0 :(得分:1)
我不确切地知道你是如何建立你的人际关系的,但我认为这就是你应该做的:
1)加载作者固定装置(它们应该要求创建任何书籍)
2)装入书籍装置。在创建灯具时,在load()方法中,您可以为每本书创建“BookAuthor”实体,并且应该将书籍实体配置为保存持久存在的BookAuthor实体。书籍实体内的“book_authors”属性可能与此类似:
/**
* @ORM\OneToMany(targetEntity="your\bundle\Entity\BookAuthor",mappedBy="book", cascade={"persist", "remove"})
*/
protected $book_authors;
所以在Book fixtures中,创建一本书的代码片段可能是(不要忘记设置任何额外的数据,它只是一个样本):
// [...]
$book = new Book();
$book->setTitle( 'xxx' )
// Set more data...
$book_author = new BookAuthor();
$book_author->setAuthor( $manager->merge($this->getReference('author-1')) );
$book_author->setBook( $book );
$book->addBookAuthor( $book_author );
$em->persist( $book );
// [...]
我希望它有所帮助!