[英]Association mapping in Doctrine
我有2个表格: jobs
和categories
。 第一个表有一个字段称为cat_id
这是一个参考categories
。 id
。 在我的实体类Job
我具有如下注释:
/**
* @ManyToOne(targetEntity="Category")
* @JoinColumn(name="cat_id", referencedColumnName="id")
**/
private $category;
public function __construct()
{
$this->category = new \Doctrine\Common\Collections\ArrayCollection();
}
在我的类别课程中,我有:
/**
* @OneToMany(targetEntity="Job", mappedBy="job")
* @JoinColumn(name="id", referencedColumnName="cat_id")
*/
private $jobs;
public function __construct()
{
$this->jobs = new \Doctrine\Common\Collections\ArrayCollection();
}
我想要得到的是具有其类别的所有职位以及按类别列出的所有职位。 但是我仍然对Doctrine还是陌生的。
你似乎是俯瞰VS主义关系映射的反向端所属的一些元素。 我建议您阅读《学说》手册中的12.关联更新:拥有面和反面 ,以获取更多详细信息。
本质上,1:N关系的一侧将是“ 拥有”侧,而另一侧是“ 反向”侧。 拥有方是实际映射关系的一方,而相反方仅反映了该映射。 -在您的代码中,将JoinColumn
放在了两边,就好像两者都应该是拥有方。
您的代码应将Job.category
属性作为拥有方,并将Category.jobs
属性作为相反方。 因此,首先将Job实体更改为如下所示:
/**
* @var Category
*
* @ManyToOne(targetEntity="Category", inversedBy="jobs")
* @JoinColumn(name="cat_id", referencedColumnName="id")
**/
private $category;
public function __construct()
{
// $category would be a single instance of Category,
// not a collection. Otherwise you'd be looking at a
// ManyToMany relationship.
}
然后将Category实体更改为如下形式:
/**
* @var ArrayCollection
*
* @OneToMany(targetEntity="Job", mappedBy="category")
*/
private $jobs;
public function __construct()
{
$this->jobs = new \Doctrine\Common\Collections\ArrayCollection();
}
请注意,在工作单位,我已经添加了inversedBy
属性为ManyToOne
注释,说明Category.jobs
财产作为映射的逆侧。 然后,我从Category.jobs
属性中删除了JoinColumn
,因为相反的一面实际上并不应该直接指定映射。 它反映了拥有方的映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.