[英]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)
我想在一个方向上映射这种关系,如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.