4

私は、次のようなエンティティと1対1の自己参照型の双方向の関係(wow )を作成しようとしています。Revision

/**
 * @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が言ったように、この動作を実現するには2つの列が必要です。

残念ながら、これにはいくつかのデータ重複が必要です。

于 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 に答える