1

Symfony 2 と Doctrine を使用してエンティティ間の関係を作成するにはどうすればよいですか? スタンドアロン エンティティしか作成できません。誰かがエンティティジェネレーターを使用してこれを理解するのを手伝ってくれるでしょうか? したい:

  • Post と Category の 2 つのエンティティを作成します。投稿はカテゴリの一部です。
  • タグ エンティティの作成: 投稿には多くのタグを含めることができます。
4

2 に答える 2

3

実用的な例は、ここの Symfony2 ドキュメントでカバーされています。

http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations

詳細を説明するには、最初の例を取り上げて、オブジェクトとオブジェクトOneToManyの間に関係を作成する必要があります。CategoryPost

カテゴリ.php:

<?php

namespace Your\CustomBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Table(name="category")
 * @ORM\Entity()
 */
class Category
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="Post", mappedBy="category")
     */
    public $posts;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->posts = new ArrayCollection();
    }

    /**
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}

Post.php

<?php

namespace Your\CustomBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="post")
 * @ORM\Entity()
 */
class Post
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="posts")
     */
    public $category;

    /**
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}

これで始められるはずです。これを書いたばかりなので、エラーがあるかもしれません:s

簡潔にするために、ここではプロパティ$postsとパブリックを作成しています。ただし、これらをプライベートにして、セッター/ゲッターをクラスに追加することをお勧めします$category

また、特にエンティティを整理するため$postsの配列のような Doctrineクラスであることに注意してください。ArrayObject$category->posts->add($post)

詳細については、Doctrine ドキュメントの関連マッピングを参照してください。ManyToManyおそらく、と の間に関係を設定する必要がありPostsますTags

お役に立てれば :)

于 2012-04-24T17:19:40.617 に答える
0

エンティティ ジェネレーター自体との関係は作成しません。

エンティティ クラス自体が存在したら (エンティティ ジェネレータで作成するか、手動で記述します)、それらを編集して関係を追加します。

たとえば、投稿に多くのタグの例がある場合

namespace Your\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Your\Bundle\Entity\Post
 *
 * @ORM\Table(name="post")
 * @ORM\Entity
 */
class Post
{
  /**
   * @var \Doctrine\ORM\PersistentCollection
   *
   * @ORM\OneToMany(targetEntity="Tag", mappedBy="post", cascade={"persist"})
   */
  private $tags;
}

リレーションシップの指定の詳細については、 Doctrine のドキュメントを参照してください。

于 2012-04-24T17:43:21.103 に答える