这个问题是关于使用ORM的Symfony2表关系的。我有三个相互关联的表/实体。该关系与Wordpress帖子,类别和类别关系表非常相似。
表1包含帖子。表2包含类别表3包含类别和职位之间的关系。
我希望能够在posts表中具有Categories属性,而在Categories表中具有posts属性。这样我打电话的时候。
Categories-> posts:我应该在该类别中获取帖子。Posts-> categories:我应该获取帖子所属的类别。
我希望每个表具有唯一的类别,并且我希望所有帖子都指向一个类别,而不必为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;
请记住,将Doctrine \ ORM \ Mapping与ORM别名一起使用(您不必分别导入所有子类):
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文档中找到所有这些信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句