我正在使用Doctrine 2.假设我们有两个实体: User 和 Bug 。是否可以与反向侧(用户)上的一列和拥有侧(Bug)上的多列进行双向关联?
如果我在 Bug 实体中定义列,如下所示:
/** @Entity */
class Bug {
/** @ManyToOne(targetEntity="User", inversedBy="associated_bugs") */
protected $reported_by;
/** @ManyToOne(targetEntity="User", inversedBy="associated_bugs) */
protected $assigned_to;
}
然后我不知道在用户实体中写什么......
/** @Entity */
class User {
/**
* @OneToMany(targetEntity="Bug", mappedBy="???")
* @var Bug[]
**/
protected $associated_bugs;
}
答案 0 :(得分:1)
这不是你不能用映射做的事情。假设你要设置一个错误列表User::associated_bugs
。在调用persist时,您期望它如何存储?
您应该分别映射两种类型的错误,然后在方法中将它们组合起来。
/** @Entity */
class User {
/**
* @OneToMany(targetEntity="Bug", mappedBy="reported_by")
* @var Bug[]
**/
protected $reported_bugs;
/**
* @OneToMany(targetEntity="Bug", mappedBy="assigned_to")
* @var Bug[]
**/
protected $assigned_bugs;
protected function getAssociatedBugs()
{
return array_merge($this->reported_bugs, $this->assigned_bugs);
}
}
答案 1 :(得分:0)
这样的事情:
/** @Entity */
class User {
/**
* @OneToMany(targetEntity="Bug", mappedBy="assigned_to")
**/
protected $associated_bugs;
/**
* @OneToMany(targetEntity="Bug", mappedBy="reported_by")
**/
protected $reported_bugs;
}
在Bug实体中,您必须添加这些注释:
对于指定的错误:
@JoinColumn(name="assignee_id", referencedColumnName="id", onDelete="cascade")
和
@JoinColumn(name="reporter_id", referencedColumnName="id", onDelete="cascade")
报告的错误
这应该做的工作