繁体   English   中英

原则中的关联映射

[英]Association mapping in Doctrine

我有2个表格: jobscategories 第一个表有一个字段称为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.

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