0

Doctrine のリファレンスと Symfony のチュートリアルを読んだ後、私はそれをプロジェクトに統合し始めました。doctrine で解決できると思っていた問題が発生しています。

コレクションが外部キーを保持するため、「ManytoOne」関係であると想定していLibrariesます。Collections

いくつかのスニペット:

ライブラリ内:

/**
*
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Collection", mappedBy="library")
*/
private $collections;

コレクション:

 /**
 * @var Library
 *
 * @ORM\ManyToOne(targetEntity="Library", inversedBy="collections")
 * @ORM\JoinColumn(name="library_id", referencedColumnName="id")
 */
private $library;

この注釈のほとんどはデフォルトであり、省略できるため、かなり基本的な設定です。

サンプル コントローラー コード:

    $library = new Library();
    $library->setName("Holiday");
    $library->setDescription("Our holiday photos");

    $collection = new Collection();
    $collection->setName("Spain 2011");
    $collection->setDescription("Peniscola");

    $library->addCollection($collection);

    $em=$this->getDoctrine()->getManager();
    $em->persist($collection);
    $em->persist($library);        
    $em->flush();

上記のコードは、所有者ではないため、テーブルにlibrary_id列を設定しません。CollectionLibrary

    $library = new Library();
    $library->setName("Holiday");
    $library->setDescription("Our holiday photos");

    $collection = new Collection();
    $collection->setName("Spain 2011");
    $collection->setDescription("Peniscola");

    $collection->setLibrary($library); <--- DIFFERENCE HERE

    $em = $this->getDoctrine()->getManager();
    $em->persist($collection);
    $em->persist($library);
    $em->flush();

動作します。しかし、ライブラリの add メソッドと remove メソッドを使用できるようにしたいと考えています。

これらの add メソッドと remove メソッドを変更してメソッドを呼び出すのは一般的setLibraryですか?

public function addCollection(\MediaBox\AppBundle\Entity\Collection $collections)
{
    $this->collections[] = $collections;
    $collections->setLibrary($this);
    return $this;
}

public function removeCollection(\MediaBox\AppBundle\Entity\Collection $collections)
{
    $this->collections->removeElement($collections);
    $collections->setLibrary(null);
}

それはとてもいいことだとは思いません。

教義または ORM のベスト プラクティスは一般的ですか?

よろしくお願いします!

4

1 に答える 1

0

明らかに、これが進むべき道です。

誰かがそれを必要とする場合:

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/working-with-associations.html#association-management-methods

この問題を説明します。

于 2012-12-31T00:59:29.300 に答える