3

同じデータベースで OneToMany 関係を持つプロジェクトがあります。

現在、次のように設計されています。

/**
 * @ORM\OneToMany(targetEntity="MyEntity", mappedBy="myCopiedItem")
 */
protected $mySource;

/**
 * @ORM\ManyToOne(targetEntity="MyEntity", inversedBy="mySource")
 * @ORM\JoinColumn(name="selected_myentity_copy_id", referencedColumnName="id")
 */
protected $myCopiedItem;

しかし今、私はこの関係をManyToManyにしなければなりません。だから私はこれをしました:

/**
 * @ORM\ManyToMany(targetEntity="MyEntity", mappedBy="myCopiedItem")
 */
protected $mySource;

/**
 * @ORM\ManyToMany(targetEntity="MyEntity", inversedBy="mySource")
 * @ORM\JoinTable(name="entity_has_copy")
 */
protected $myCopiedItem;

しかし、symfony が作成した「entity_has_copy」テーブルには 1 つの項目 (myentity_id) しかなく、2 つのフィールド「myentity_id」と「selected_myentity_copy_id」が必要ですが、どちらも「myentity」テーブルの実際の ID です...

生成されたテーブルに両方の ID を含めるには、何を変更する必要がありますか?

私は何かを逃したと確信していますが、何がわかりません:(

注: エンティティ/テーブル名はプライバシーのために名前が変更されました

4

1 に答える 1

5

これで解決!

定義内に関係を追加する必要がありました...

したがって、これは JoinTable 部分の正しい定義です。

/**
 * @ORM\ManyToMany(targetEntity="MyEntity", inversedBy="mySource")
 * @ORM\JoinTable(name="entity_has_copy",
 *      joinColumns={@ORM\JoinColumn(name="entity_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="entity_copy_id", referencedColumnName="id")}
 *      )
 */
protected $myCopiedItem;

これが同じ問題を抱えている他の人に役立つことを願っています...

エンティティ間の関連付けが Doctrine でどのようにマッピングされるかについてもっと読みたい場合は、こちらのURL が良いでしょう!

于 2013-02-27T15:39:30.970 に答える