Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令:遗留数据库上的多对多无联接表_Php_Mysql_Symfony_Doctrine Orm - Fatal编程技术网

Php 条令:遗留数据库上的多对多无联接表

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

我的问题本质上是,我只是在使用条令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)
  • 分组代码在两个表中不是唯一的
  • 每个表_条目与n个产品关联
我想将这种关系映射到一个方向,如所说的Hibernate问题中所述:

/**
 * @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注释是我尝试过的,但没有成功。