2016-04-27 80 views
1

我的問題本質上是this one,只有我使用Doctrine 2而不是Hibernate。我給出的這個(簡體)DB結構:學說:多對多沒有遺留數據庫連接表

PRODUCT      TABLE_ENTRY 
-------      ----------- 
ID int primary key   ID int primary key 
NAME varchar     IDX int 
GROUPING_CODE varchar(32) GROUPING_CODE varchar(32) 
  • GROUPING_CODE不是兩個表
  • 每個TABLE_ENTRY與正產品

相關的獨特的,我想這個映射關係在一個方向上,如answer所述,表示冬眠問題:

/** 
* @ORM\OneToMany(targetEntity="Product") 
* @ORM\JoinColumn(name="grouping_code", referencedColumnName="grouping_code") 
*/ 
private $products; 

在學說中,這似乎不起作用,因爲OneToMany需要「mappedBy」屬性。還有其他方法可以在Doctrine中實現類似的映射嗎?只讀也是足夠的。

+0

OneToMany不需要連接表,並可以在您的示例中工作。另一方面,你對這個問題的標題是:ManyToMany。這總是需要一個連接表,不能沒有。 – colburton

+0

準確地說:標題沒有說ManyToMany,而是多對多,因爲我不是指註釋類,而是指一般類型的數據庫關係。 OneToMany註釋是我嘗試的,但沒有成功。 –

回答

0

在此期間,我發現,這似乎是工作,也許是在我的情況下,充分的解決方案:

/** 
* @ORM\ManyToMany(targetEntity="Product") 
* @ORM\JoinTable(name="product", 
*  joinColumns={ 
*   @ORM\JoinColumn(name="grouping_code", referencedColumnName="grouping_code")}, 
*  inverseJoinColumns={ 
*   @ORM\JoinColumn(name="id", referencedColumnName="id")} 
*  ) 
*/ 
private $products; 

從本質上講,這是使用目標表產品本身(再次)作爲連接表。

這確實感覺像一個黑客,可能是,但它似乎在做什麼是必需的。不過,我確信在用於寫入數據庫時​​,它會完全失敗。

更新:此解決方案的一個巨大缺陷是數據庫模式更新,創建和轉儲將不起作用,因爲Doctrine抱怨表PRODUCT已經存在。