2012-02-17 6 views
0

2つのフィクスチャが互いに依存して読み込まれているときに、フィクスチャロードの順序を制御するにはどうすればよいですか?Doctrine Fixtures:Joinテーブルを使用したgetOrder()

私のスキーマには、Bookエンティティ、Authorエンティティ、BookAuthorエンティティがあります。書籍は多くの作家を持つことができ、著者が本の主著者であるかどうかを示す「主」という追加フィールドがあるため、BookAuthorが必要です。 BookFixturesで

、IはBookAuthorFixturesを参照:BookAuthorFixturesで

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

、IはBookFixturesを参照:

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

器具の一つは、それが参照する固定具が未定義であることを意味しており、最初にロードされなければなりませんインデックス。

この問題を解決する秘訣はありますか?

このquestionはほぼ同じ問題に対処していますが、構成が異なり、問題の解決には至っていません。私はあなたがあなたの関係を設定しなかった正確にどのように知りませんが、私は、これはあなたが何をすべきかと思い

答えて

1

1)著者の備品をロードします(それらが作成されるすべての本を要求すべきである)

2)ブックフィクスチャをロードします。フィクスチャを作成している間、load()メソッドでは、各ブックに「BookAuthor」エンティティを作成できます。ブックエンティティは、保持されているBookAuthorエンティティを保存するように設定する必要があります。だから、ブック器具で、ブックを作成するコードスニペットは、(それはだ、余分なデータを設定することを忘れないでくださいことがあり

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

:ブックエンティティの内部プロパティ「book_authorsは、」これに似たものになる可能性単なるサンプル):

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

// [...] 

私はそれが助けてくれることを願っています!

+0

応答とコードスニペットを提供していただきありがとうございます。残念ながら、このアプローチはOrderedFixtureInterface機能を利用していません。つまり、あるフィクスチャが別のフィクスチャのインスタンスを作成する必要があります。しかし、これは基本的なタスクを達成するので、私が自分自身を描いたコーナーの道を知っている人がいなければ、答えを受け入れるだろう。 Thx again – cantera

+0

こんにちは!もう1つのアプローチは、書籍の実体が著者を持たないようにすることです(未知の著者によって書かれた書籍がいくつかあるかもしれません)。その後、書籍や著者のための備品を読み込み、その後にBookAuthorの備品を読み込むことができます。さらに、私はBookAuthorエンティティを本と一緒に作成しなければならないと思いますが、誰かがあなたの問題を解決するためのより良いアプローチを持っている可能性があります。よろしく – alghimo

関連する問題