双向关联,反向一侧为一列,另一侧为多列

时间:2013-05-03 12:19:31

标签: php doctrine-orm relationship

我正在使用Doctrine 2.假设我们有两个实体: User Bug 。是否可以与反向侧(用户)上的一列和拥有侧(Bug)上的多列进行双向关联?

Example

如果我在 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;
}

2 个答案:

答案 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")

报告的错误

这应该做的工作