Приспособления доктрины: getOrder () с таблицами соединения - PullRequest
0 голосов
/ 17 февраля 2012

Как вы контролируете порядок загрузки приборов, когда два прибора зависят друг от друга при загрузке?

Моя схема содержит сущность Book, сущность Author и BookAuthor.У книг может быть много авторов, и BookAuthor требуется, поскольку в нем есть дополнительное поле, называемое «основным», указывающее, является ли автор основным автором книги.

В BookFixtures я ссылаюсь на BookAuthorFixtures:

$book1->addBookAuthor($manager->merge($this->getReference('book-author-1')));

В BookAuthorFixtures я ссылаюсь на BookFixtures:

$bookAuthor1->setBook($manager->merge($this->getReference('book-1')));

Один из приборов должен быть загружен первым, что означает, что он ссылается на неопределенный индекс.

Есть ли хитростьрешить эту проблему?

Этот вопрос решает почти ту же проблему, но конфигурация отличается, и проблема осталась нерешенной, несмотря на принятый ответ.

1 Ответ

1 голос
/ 17 февраля 2012

Я не знаю точно, как вы установили свои отношения, но я думаю, что это то, что вы должны сделать:

1) Загрузите светильники Author (они должны требовать создания каких-либо книг)

2) Загрузите книгу.Пока вы создаете приборы, в своем методе load () вы можете создать сущность «BookAuthor» для каждой книги, и сущность книги должна быть настроена так, чтобы сохранять сущности BookAuthor, которые она содержит, когда она сохраняется.Свойство "book_authors" внутри сущности книги может быть примерно таким:

/**
 * @ORM\OneToMany(targetEntity="your\bundle\Entity\BookAuthor",mappedBy="book", cascade={"persist", "remove"})
 */
protected $book_authors;

Так что в фикстурах Book может быть фрагмент кода, который создает книгу (не забудьте установить дополнительные данные, это всего лишь образец):

// [...]
$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 );

// [...]

Надеюсь, это помогло!

...