4

我正在尝试与实体创建一对一的、自引用的双向关系 ( wowRevision ) ,如下所示:

/**
 * @Entity()
 * @Table(name="rev")
 */
class Revision extends BaseEntity
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @Column(type="string")
     */
    protected $comment;

    /**
     * @OneToOne(targetEntity="Revision", inversedBy="parent")
     * @JoinColumn(name="revision_of", referencedColumnName="id")
     */
    protected $revisionOf;

    /**
     * @OneToOne(targetEntity="Revision", mappedBy="revisionOf")
     */
    protected $parent;
}

没有parent属性,一切正常。当我添加该属性时,两种关系都返回null.

直接的问题是:我想要做的事情可以在 Doctrine 中完成吗?如果是这样,我将如何去做?

4

3 回答 3

1

回答我自己的问题:这是不可能的。正如 bksunday 所说,您需要两列来完成此行为。

不幸的是,这需要一些数据重复。

于 2013-01-03T22:09:03.290 回答
1

我已经用这个解决了

oneToOne:
  previous:
    targetEntity: Change
    mappedBy: next
    joinColumn:
      name: id
      referencedColumnName: next_id
  next:
    targetEntity: Change
    inversedBy: previous
于 2017-06-12T09:21:34.110 回答
0

当你有双向关系时,你必须管理双方

在这种情况下

$revision->setRevisionOf($revisionOf);
$revisionOf->setParent($revision);

与协会合作的原则

In the case of bi-directional associations you have to update the fields on both sides:
于 2012-08-24T21:10:06.430 回答