我应该创建多对多关系吗?

时间:2013-11-25 21:27:32

标签: mysql symfony doctrine-orm

我卡住了ATM。自从我做了最新的网站开发以来已经过了几个月,现在我感觉很愚蠢。

我在Doctrine2中创建了一个名为User的类,另一个名为Publication的类。

Publication类与User有一个ManyToOne关系,因此我可以确定哪个User创建了Publication

就像那样:

/**
 * @ORM\ManyToOne(targetEntity="Users")
 * @ORM\JoinColumn(name="user", referencedColumnName="id")
 */
private $user;

现在,我想要做的是在这两个类之间创建一个多对多(我猜)关系来执行以下操作:

  • 每个用户都可以将points(int)提供给任何出版物。

在Mysql Schema中,我认为我最终会得到一个名为User_Voted_Publication的第3个表,但是我不确定如何在Doctrine中这样做。

如果我只创建一个ManyToMany关系,则无法添加属性points,该属性将保存User给任何特定Publication的点数。

任何提示都表示赞赏。

非常感谢,如果这个问题似乎很愚蠢,那就很抱歉。我已经觉得那样=)。

1 个答案:

答案 0 :(得分:1)

根据我的经验(如果我错了,任何人都可以随意插入),学说中的多对多关系只允许使用主键(在您的情况下,user_id和publication_id)。如果表中有任何其他字段(User_Voted_Publication表),则doctrine将无法识别它们。我为解决这个问题所做的是创建新实体(User_Voted_Publication),然后与其他表(用户表和发布表)创建一对多关系。

这将允许您在User_Voted_Publication表中添加所需的任何其他字段。我注意到的一件事可能并不理想......我不得不在表中创建一个自动增量id字段而不是使用自然主键(user_id,publication_id),但它仍然可以正常工作。我刚刚在两个字段(user_id,publication_id)上做了一个唯一约束。