2010-12-14 68 views
19

我有两张表和一个连接表:'staff','classification'和'staff_classification'。在连接表中,我有一个额外的布尔字段:'showclassification'。我的注解如下:学说2连接表+额外字段

/** 
* @ManyToMany(targetEntity="Staff", inversedBy="classifications") 
* @JoinTable(name="staff_classifications", 
* joinColumns={@JoinColumn(name="staffid", referencedColumnName="id")}, 
* inverseJoinColumns={@JoinColumn(name="classificationid", referencedColumnName="id", unique=true)}); 
*/ 
  1. 我如何额外字段“showclassifications”添加到连接表?
  2. 如何通过DQL引用该字段?例如。什么查询会获得允许显示的所有员工分类?
  3. 是否将上述注释放在一个类中,而另一个@ManyToMany注释中没有@joinTable?例如。 @ManyToMany(targetEntity =“分类”)?
+0

在这里你可以找到一个关于在这种情况下遵循的方法的伟大文章:http://future500.nl/articles/2013/09/doctrine-2-how-to-handle-join-tables-with-extra -columns/ – 2014-11-03 16:54:11

回答

32

您需要一个描述关系(StaffClassifications)的实体,该关系与员工和分类都有OneToMany关系。

ManyToMany不允许您有任何“额外”属性,因为连接表不是实体,因此不能具有任何属性。

+3

+1这是合乎逻辑的面向对象方式。这个确切的问题在邮件列表上会有很多问题,这也是Doctrine团队的建议。 – 2010-12-14 19:14:31

+0

真棒。谢谢,我会遵循这种模式,看看我如何去。干杯。 – waigani 2010-12-14 21:39:14

+1

使用OO模式,以上问题2的答案是什么? DQL会是什么样子? – waigani 2010-12-14 23:10:34