繁体   English   中英

Symfony2获取另一个实体中的一个实体

[英]Symfony2 Get entities of an entity in another entity

这个问题是关于使用ORM的Symfony2表关系的。 我有三个相互关联的表/实体。 该关系与Wordpress帖子,类别和类别关系表非常相似。

表1包含帖子。 表2包含类别表3包含类别和职位之间的关系。

我希望能够在posts表中具有Categories属性,并且在Categories表中具有posts属性。 这样我打电话的时候。

Categories-> posts:我应该在该类别中获取帖子。 帖子->类别:我应该获取帖子所属的类别。

我希望每个表具有唯一的类别,并且我希望所有帖子都指向一个类别,而不必为ManyToOne或OneToMany提供的类别创建新条目,这就是为什么我认为有必要使用第三张表的原因。

例如这里是关系

class Category_relationship
{

    /**
     * @var integer
     *
     * @ORM\Column(name="object_id", type="bigint")
     *
     * @ORM\ManyToOne(targetEntity="Worksheet",         inversedBy="category_relationships")
     * @ORM\JoinColumn(name="worksheet_id", referencedColumnName="id", nullable=FALSE)
     */
    private $objectId;

    /**
     * @var integer
     *
     * @ORM\Column(name="category_id", type="bigint")
     *
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="categories")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=FALSE)
     */
    private $categoryId;

}

这是Category类:

class Category
{
    /**
     * @ORM\OneToMany(targetEntity="Category_relationship", mappedBy="categoryId", cascade={"persist", "remove"}, orphanRemoval=TRUE)
     */
    protected $posts;
}

这是Category类:

class Posts
{    /**
     * @ORM\OneToMany(targetEntity="Category_relationship", mappedBy="objectId", cascade={"persist", "remove"}, orphanRemoval=TRUE)
     */
    protected $categories;
}

我想创建一个系统,可以在其中分配帖子到类别,但是类别表只能包含1个有关该类别的条目。 我还希望能够使用表达式链接;

帖子->类别类别->帖子

要么

Post-> AddCategory()类别-> AddPost()

谢谢你的帮助。

似乎您想要一个简单的多对多关系。

每个帖子可以有多个类别,每个类别都有相关帖子的列表。 多对多本身可以处理数据透视表。

因此,在Post实体中,您必须以这种方式声明关系:

/**
 * @ORM\ManyToMany(targetEntity="Category", inversedBy="posts")
 * @ORM\JoinTable(name="PostsCategories",
 *      joinColumns={@ORM\JoinColumn(name="post_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
 *      )
 **/
protected $categories;

记住使用带有ORM别名的Doctrine \\ ORM \\ Mapping(您不必分别导入所有子类):

use Doctrine\ORM\Mapping as ORM;

之后,您需要在类构造函数中创建一个新的ArrayCollection:

public function __construct()
{
    $this->categories = new ArrayCollection();
}

并添加适当的方法,例如addCategory:

public function addCategory(Category $category)
{
    $this->categories[] = $category;

    return $this;
}

您还可以使用以下方法自动添加它们:

php app/console doctrine:generate:entities BundleName:EntityName

类别实体中的内容相同,但定义有所不同:

 /**
 * @ORM\ManyToMany(targetEntity="Post", mappedBy="categories")
 **/
protected $posts;

您可以在Doctrine文档中找到所有这些信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM