繁体   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