如何使用 Symfony 2 和 Doctrine 创建实体之间的关系?我只能创建独立的实体。也许有人可以帮助我使用实体生成器解决这个问题?我想要:
- 创建两个实体:帖子和类别。帖子是类别的一部分。
- 创建一个标签实体:一个帖子可以有很多标签。
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
公开;但是,您可能会被建议将这些设为私有并将 setter/getter 添加到您的 classes中。
另请注意,这$posts
是一个类似数组的 DoctrineArrayObject
类,特别是用于排列实体,具有诸如$category->posts->add($post)
etc之类的方法。
有关更多详细信息,请查看 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 的文档。