Symfony 2 と Doctrine を使用してエンティティ間の関係を作成するにはどうすればよいですか? スタンドアロン エンティティしか作成できません。誰かがエンティティジェネレーターを使用してこれを理解するのを手伝ってくれるでしょうか? したい:
- Post と Category の 2 つのエンティティを作成します。投稿はカテゴリの一部です。
- タグ エンティティの作成: 投稿には多くのタグを含めることができます。
実用的な例は、ここの Symfony2 ドキュメントでカバーされています。
http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations
詳細を説明するには、最初の例を取り上げて、オブジェクトとオブジェクトOneToMany
の間に関係を作成する必要があります。Category
Post
カテゴリ.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
。
お役に立てれば :)
エンティティ ジェネレーター自体との関係は作成しません。
エンティティ クラス自体が存在したら (エンティティ ジェネレータで作成するか、手動で記述します)、それらを編集して関係を追加します。
たとえば、投稿に多くのタグの例がある場合
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 のドキュメントを参照してください。