Php 一对一、自我参照、双向关系

Php 一对一、自我参照、双向关系,php,doctrine,Php,Doctrine,我正在尝试创建一个一对一、自参考、双向关系(wow),其中包含一个实体,Revision,如下所示: /** *@Entity() *@Table(name=“rev”) */ 类修订扩展了BaseEntity { /** *@Id *@Column(type=“integer”) *@GeneratedValue */ 受保护的$id; /** *@Column(type=“string”) */ 受保护的评论; /** *@OneToOne(targetEntity=“Revision”,i

我正在尝试创建一个一对一、自参考、双向关系(wow),其中包含一个实体,
Revision
,如下所示:

/**
*@Entity()
*@Table(name=“rev”)
*/
类修订扩展了BaseEntity
{
/**
*@Id
*@Column(type=“integer”)
*@GeneratedValue
*/
受保护的$id;
/**
*@Column(type=“string”)
*/
受保护的评论;
/**
*@OneToOne(targetEntity=“Revision”,inversedBy=“parent”)
*@JoinColumn(name=“修订版”,referencedColumnName=“id”)
*/
受保护的美元修订;
/**
*@OneToOne(targetEntity=“Revision”,mappedBy=“revisionOf”)
*/
受保护的$父母;
}
如果没有
parent
属性,一切正常。当我添加该属性时,两个关系都返回
null


眼前的问题是:我试图做的事能在教义上实现吗?如果是这样的话,我该怎么做呢?

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

在这种情况下

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


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


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

我用这个解决了这个问题

oneToOne:
  previous:
    targetEntity: Change
    mappedBy: next
    joinColumn:
      name: id
      referencedColumnName: next_id
  next:
    targetEntity: Change
    inversedBy: previous

你找到解决办法了吗?我想做同样的事情,但我用两个一个一个的自引用分离了关系,我仍然会遇到问题。没关系,我有一个打字错误,如果我在两个不同的列上用相同的referencedColumnName做两个单独的单向关系,它会起作用,但我仍然想知道这个问题的双向性。这个问题在将来可能会有用
oneToOne:
  previous:
    targetEntity: Change
    mappedBy: next
    joinColumn:
      name: id
      referencedColumnName: next_id
  next:
    targetEntity: Change
    inversedBy: previous