0

テーブルの 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: 意図せずに重複を作成していたことが判明しました。実際にそれらを防ぐために関数を変更すると、うまく機能するようです。

4

1 に答える 1

0

これは私自身のせいであることがわかりました。前述したように、値の重複を回避するように設定するときに id をキーとして使用していました...ただし、最初に読み込まれたものにはそのようなキーが与えられていなかったため、実際には重複が発生していました。私はそれを行うことから、追加する前にそれが含まれているかどうかを単に確認することに切り替えましたが、今では問題なく動作します.

于 2013-02-12T03:42:54.390 に答える