2010-12-14 82 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