テーブルの 1 つに対して、多対多の自己参照の非等価関係があります。データベース テーブルは次のようになります。
Node
- id
Node_Relationship
- parent_id (FK of Node.id)
- child_id (FK of Node.id)
- PRIMARY KEY (parent_id, child_id)
これにより、Doctrine で問題が発生し、その ID の組み合わせに対して重複したエントリが作成されます。
このスレッドhttp://www.doctrine-project.org/jira/browse/DC-329では、refClassRelationAlias の使用に関する一番下の修正について言及しています。
私の質問は、これをどのように実装するのですか? 私は PHP アノテーション メソッドを使用してクラスをマークアップしていますが、YAML ファイルの使用についてのみ言及していますが、現在は行っていません。
YAML ファイルにすべてを完全にやり直すことなく、これを実装できますか? もしそうなら、どのように?
ありがとう。
アップデート:
私の 2 つのフィールドは、次のように注釈が付けられています。
/**
* @ORM\ManyToMany(targetEntity="Module", inversedBy="children")
* @ORM\JoinTable(name="module_relationships",
* joinColumns={@ORM\JoinColumn(name="child_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="parent_id",
* referencedColumnName="id")}
* )
*/
protected $parents;
/**
* @ORM\ManyToMany(targetEntity="Module", mappedBy="parents")
*/
protected $children;
親または子に何かを追加するときは、逆も設定します。ArrayCollection での重複を避けるために、set を使用し、オブジェクトの ID をキーとして使用します。
彼らはバグを修正しましたか?私は何か間違ったことをしているだけですか?または、別の修正を伴うバグがまだありますか。Symfony バージョン 2.0.12 を使用しています。
ありがとう。
更新 2: 意図せずに重複を作成していたことが判明しました。実際にそれらを防ぐために関数を変更すると、うまく機能するようです。