ManyToMany在同一张桌子上

时间:2013-02-27 14:33:45

标签: symfony many-to-many

我有一个项目,我在同一个数据库上有一个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,我需要修改什么?

我确定我错过了什么,但我无法弄明白:(

  

注意:实体/表名称已重新命名为隐私

1 个答案:

答案 0 :(得分: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映射实体之间的关联,请参阅a good URL