如何在Symfony 2和Doctrine的实体之间创建关系?我只能创建独立的实体。也许有人可以帮助我使用实体生成器解决这个问题?我想:
答案 0 :(得分:3)
这里的Symfony2文档中包含一个实际示例:
http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations
详细说明一下,在第一个示例中,您需要在OneToMany
对象与Category
对象之间建立Post
关系:
Category.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 / getters 。
另请注意,$posts
是一个类似于数组的Doctrine ArrayObject
类,尤其适用于使用$category->posts->add($post)
等方法来聚合实体。
有关详细信息,请查看Doctrine文档中的关联映射。您可能需要在ManyToMany
和Posts
之间设置Tags
关系。
希望这会有所帮助:)
答案 1 :(得分: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's Documentation。