[英]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.