3

私にはGiftエンティティがあり、このエンティティには送信者と受信者がいます...どちらのエンティティからも、ユーザーは他のユーザーへの多くのギフトの送信者Userに なることができます。だけでなく、多くのユーザーからの多くの贈り物の受信者

私の見方では、私のGiftエンティティ内のソリューションは次のようになります。

/**
 * @ORM\ManyToMany(targetEntity="Tracker\UserBundle\Entity\User")
 * @ORM\JoinTable(name="gift_user",
 *      joinColumns={@ORM\JoinColumn(name="sender_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="gift_id", referencedColumnName="id")}
 *      )
 */
protected $senders;

/**
 * @ORM\ManyToMany(targetEntity="Tracker\UserBundle\Entity\User")
 * @ORM\JoinTable(name="gift_user",
 *      joinColumns={@ORM\JoinColumn(name="receiver_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="gift_id", referencedColumnName="id")}
 *      )
 */
protected $receivers;

しかし、私が実行すると、次のphp app/console doctrine:schema:update --dump-sqlようになります。

  [Doctrine\DBAL\Schema\SchemaException]                          
  The table with name 'finaldb.gift_user' already exists. 

構文、構成を変更する必要があるので、このようなテーブルになりますか?

gift_id | sender_id | receiver_id
4

2 に答える 2

3

あなたが達成しようとしていることは、2 つの結合テーブルなしでは不可能です。

@ManyToMany関連付けには、異なる結合テーブルが必要です。これは、結合テーブルが 2 つのリンクされたエンティティ以外のことを認識していないためです (関連付けの方向を認識していないため)。また、Doctrine ORM によって生成された結合テーブルには、自動増分識別子がありません。これは、2 つの参照が既にテーブルの主キーを表しているためです。

于 2012-06-27T12:26:07.217 に答える
2

これがものです: joinTable を使用して、結合テーブル名を指定できます

/**
     * @ORM\ManyToMany(targetEntity="Tracker\UserBundle\Entity\User")
     * @ORM\JoinTable(name="gift_user",joinTable="myprefix_mytable_senders",
     *      joinColumns={@ORM\JoinColumn(name="sender_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="gift_id", referencedColumnName="id")}
     *      )
     */
    protected $senders;

    /**
     * @ORM\ManyToMany(targetEntity="Tracker\UserBundle\Entity\User")
     * @ORM\JoinTable(name="gift_user",joinTable="myprefix_mytable_receivers"
     *      joinColumns={@ORM\JoinColumn(name="receiver_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="gift_id", referencedColumnName="id")}
     *      )
     */
    protected $receivers;
于 2012-06-27T15:30:35.650 に答える