symfony - 同一张表上的多对多

标签 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,我必须修改什么?

我确信我错过了一些东西,但我不知道是什么:(

Note: Entity / table names were renamed for privacy

最佳答案

解决了这个问题!

我必须在定义中添加关系...

所以这是 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 !

关于symfony - 同一张表上的多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15114666/

相关文章:

symfony - 索纳塔媒体包 : Files/Images not found

ef-code-first - 使用 codefirst 或 fluent API 与同一实体的多对多(连接表)关系?

Django - "ManyToMany"没有主键(AutoField)

many-to-many - 禁用 Odoo 中的弹出表单 Many2many 字段

php - 如何在一个可以具有不同值的属性上查找

php - 在 React 中为服务器端渲染生成 CSS - Material-UI

php - 在 FOSUserBundle 中管理用户/角色/组

php - 使用原则 2 确定缓存命中/未命中

php - 从多个具有限制的多对多关系表中检索结果

Fluent-NHibernate:如何创建具有唯一约束的多对多关系