同一张表上的多对多关系

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”表只有一个项目(myentity_id),我希望有两个字段“myentity_id”和“selected_myentity_copy_id”,它们都是来自我的“myentity”表的实际id...
我需要修改什么才能在生成的表中拥有这两个id?
我确信我漏掉了什么,但我无法弄清楚是什么 :(
注:为保护隐私,实体/表名称已更改。
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如何映射实体之间的关联的更多信息,这里是一个不错的网址


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接