簡體   English   中英

Doctrine:遺留數據庫中沒有連接表的多對多

[英]Doctrine: Many-to-Many without Join Table on Legacy Database

我的問題基本上是這個問題,只是我使用的是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與n個PRODUCT相關聯

我想在一個方向上映射這種關系,如Hibernate問題的答案所述:

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

在Doctrine中,這似乎不起作用,因為OneToMany需要“ mappedBy ”屬性。 還有另一種方法可以在Doctrine中實現類似的映射嗎? 只讀也足夠了。

與此同時,我找到了一個似乎有效的解決方案,在我的情況下可能就足夠了:

/**
 * @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;

本質上,這是使用目標表PRODUCT本身(再次)作為連接表。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM