【问题标题】:Symfony2-Doctrine ManyToMany with 3 fields relatedSymfony2-Doctrine ManyToMany 与 3 个相关领域
【发布时间】:2015-07-14 12:01:52
【问题描述】:

我在定义关联映射时遇到问题,我不知道如何解决。

我想在两个对象之间建立多对多关系,但不仅仅是一个字段。

一张表指人物,另一张指图片,这种关系的目标是表示当一个人被其他人标记为这张图片时

我需要这样的东西:


|已标记 |标记器 |照片 |

| person_id_1 | person_id_2 | image_id_1 |

| person_id_3 | person_id_2 | image_id_1 |

| person_id_2 | person_id_4 | image_id_2 |

我尝试使用这样的多对多关系:

/**
 * @ORM\ManyToMany(targetEntity="Media")
 * @ORM\JoinTable(name="persons_tagged",
 *  joinColumns={
 *   @ORM\JoinColumn(name="user_tagged", referencedColumnName="id"),
 *   @ORM\JoinColumn(name="user_tagger", referencedColumnName="id")
 *  },
 *  inverseJoinColumns={
 *   @ORM\JoinColumn(name="media_id",referencedColumnName="id")
 *  }
 * )
 **/
 private $employeeTagged;

当我尝试通过控制台更新架构时,数据库中的表被创建但没有外键,因为抛出了外键定义异常,我必须手动创建外键。

有人遇到过类似的问题或有解决方法吗?谢谢

【问题讨论】:

    标签: symfony doctrine-orm many-to-many


    【解决方案1】:

    创建一个新实体,该实体具有指向图像的链接、指向标记器(用户)的链接、指向标记器(用户)的链接。

    您可能还想添加创建的日期时间、更新的日期时间、此人所在的图像部分、描述/文本等。

    【讨论】:

    • 实际上这对我来说听起来是最好和最简单的解决方案。
    • 我完全同意这个答案。我过去使用了相同的方法。您只需将多对多分解为多对一 + 一对多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多