如何在Symfony 2和Doctrine中关联实体


How to relate entities in Symfony 2 and Doctrine?

如何在具有Symfony 2和Doctrine的实体之间创建关系?我只能创建独立实体。也许有人可以使用实体生成器帮助我解决这个问题?我想:

  • 创建两个实体:帖子和类别。帖子是类别的一部分。
  • 创建标签实体:一个帖子可以有多个标签。

一个实际的例子在 Symfony2 文档中介绍:

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

为了详细说明,以第一个示例为例,您需要在Category对象和Post对象之间创建OneToMany关系:

类别.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;
    }
}

后.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公开属性;但是,可能会建议您将这些设为私有并将二传手/getter添加到您的类中

另请注意,$posts是一个类似数组的 Doctrine ArrayObject类,特别适用于使用$category->posts->add($post)等方法排列实体。

有关更多详细信息,请查看原则文档中的关联映射。您可能需要在PostsTags之间建立ManyToMany关系。

希望这对:)有所帮助

您不会创建与实体生成器本身的关系。

实体

类本身存在(使用实体生成器创建或手动编写)后,即可对其进行编辑以添加关系。

例如,您的帖子具有许多标签示例

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;
}

有关指定关系的更多信息,请参阅原则的文档。