Php 条令:遗留数据库上的多对多无联接表
我的问题本质上是,我只是在使用条令2而不是Hibernate。我得到了这个(简化的)DB结构:Php 条令:遗留数据库上的多对多无联接表,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我的问题本质上是,我只是在使用条令2而不是Hibernate。我得到了这个(简化的)DB结构: PRODUCT TABLE_ENTRY ------- ----------- ID int primary key ID int primary key NAME varchar IDX int GROUPING_CODE varchar(32) GROUPI
PRODUCT TABLE_ENTRY
------- -----------
ID int primary key ID int primary key
NAME varchar IDX int
GROUPING_CODE varchar(32) GROUPING_CODE varchar(32)
- 分组代码在两个表中不是唯一的
- 每个表_条目与n个产品关联
/**
* @ORM\OneToMany(targetEntity="Product")
* @ORM\JoinColumn(name="grouping_code", referencedColumnName="grouping_code")
*/
private $products;
在条令中,这似乎不起作用,因为“
mappedBy
”属性是OneToMany
所必需的。有没有其他方法可以实现类似的原则映射?只读也就足够了。与此同时,我找到了一个似乎有效的解决方案,在我的情况下可能就足够了:
/**
* @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;
本质上,这是使用目标表产品本身(再次)作为联接表
这确实感觉像是一个黑客,而且可能是,但它似乎在做需要做的事情。不过,我敢肯定,当它用于写入数据库时,它会完全失败
更新:此解决方案的一个巨大缺陷是DB模式更新、创建和转储无法工作,因为条令抱怨表产品已经存在。与此同时,我找到了一个似乎可以工作的解决方案,在我的情况下可能就足够了:
/**
* @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;
本质上,这是使用目标表产品本身(再次)作为联接表
这确实感觉像是一个黑客,而且可能是,但它似乎在做需要做的事情。不过,我敢肯定,当它用于写入数据库时,它会完全失败
更新:此解决方案的一大缺点是DB模式更新、创建和转储无法工作,因为条令抱怨表产品已经存在。OneToMany不需要联接表,在您的示例中可以工作。另一方面,你对这个问题的标题是:很多。这总是需要一个联接表,没有联接表是不行的。确切地说,标题不是说manytomy,而是多对多,因为我指的不是注释类,而是一般类型的数据库关系。OneToMany注释是我尝试过的,但没有成功。OneToMany不需要联接表,在您的示例中可以工作。另一方面,你对这个问题的标题是:很多。这总是需要一个联接表,没有联接表是不行的。确切地说,标题不是说manytomy,而是多对多,因为我指的不是注释类,而是一般类型的数据库关系。OneToMany注释是我尝试过的,但没有成功。