Doctrine2 symfony2多个多个关系

Doctrine2 symfony2多个多个关系,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个礼物实体,这个实体有一个发送者和一个接收者…都来自实体用户 一个用户可以是给其他用户的许多礼物的发送者。同时也是许多用户馈赠礼物的接收者 在我看来,我的礼物实体中的解决方案如下: /** * @ORM\ManyToMany(targetEntity="Tracker\UserBundle\Entity\User") * @ORM\JoinTable(name="gift_user", * joinColumns={@ORM\JoinColumn(name="sender_

我有一个
礼物
实体,这个实体有一个发送者和一个接收者…都来自实体
用户
一个用户可以是给其他用户的许多礼物的发送者。同时也是许多用户馈赠礼物的接收者

在我看来,我的
礼物
实体中的解决方案如下:

/**
 * @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应用程序/控制台原则:schema:update--dump sql
时,我得到:

  [Doctrine\DBAL\Schema\SchemaException]                          
  The table with name 'finaldb.gift_user' already exists. 
我必须如何更改我的语法、配置,以得到这样一个表

gift_id | sender_id | receiver_id

如果没有两个联接表,您要实现的目标是不可能的

每个
@ManyToMany
关联都需要不同的联接表。这是因为联接表只知道两个链接的实体(不知道关联的方向)。此外,由ORM生成的联接表没有任何自动增量标识符,因为这两个引用已经表示表的主键。

以下是一些内容: 可以使用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;

谢谢,那么我该如何解决这个问题呢?对我来说重要的是,收件人是可以识别的,这很容易做到……但我如何才能清楚地识别发件人?解决方法?完全错过了有关评论的通知,对不起。如果您有一个接收方-发送方结构,您可能希望使用一个包含两个字段的连接实体,一个指向发送方,另一个指向接收方。这将删除您的
@ManyToMany
关系,并将其替换为实体,以便您可以为关联提供方向。