我有两个具有多对多关系的模型。ID不是由规则管理的,而是由来自不同应用程序的GUID生成器管理的。因此,我的实体有一个名为uniqueIdentifier而不是id的字段。这样做:
class Bar {
/**
* @ManyToMany(targetEntity="Foo", mappedBy="bar")
*/
private $foo;
}
class Foo {
/**
* @ManyToMany(targetEntity="Bar", mappedBy="foo")
*/
private $bar;
}我收到一个错误,说明Column name 'id' referenced for relation from App\Entity\Foo towards App\Entity\Bar does not exist。据我所知,这是由于默认的原理:将stuff映射到_id作为引用列名,将table1_table2映射到join表。
我不能覆盖默认值,因为有几个模型确实有自动生成的值,并且依赖于id字段。相反,我想做一些类似以下的事情:
class Bar {
/**
* @ManyToMany(targetEntity="Foo", mappedBy="bar")
* @JoinColumn(name="foo_uid", referencedColumnName="uniqueIdentifier")
*/
private $foo;
}
class Foo {
/**
* @ManyToMany(targetEntity="Bar", mappedBy="foo")
* @JoinColumn(name="bar_uid", referencedColumnName="uniqueIdentifier")
*/
private $bar;
}这不起作用,我得到了同样的错误。怎么办?
发布于 2019-10-24 19:30:48
您的关联映射应该如下所示:
class Bar
{
/**
* @var Foo[]|\Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Foo", inversedBy="bar")
* @ORM\JoinTable(
* name="table1_table2",
* joinColumns={
* @ORM\JoinColumn(name="foo_uid", referencedColumnName="uniqueIdentifier")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="bar_uid", referencedColumnName="uniqueIdentifier")
* }
* )
*/
private $foo;
}
class Foo {
/**
* @var Bar[]|\Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Bar", mappedBy="foo")
*/
private $bar;
}请记住,foo_uid和bar_uid列将位于table1_table2表中,uniqueIdentifier是Foo和Bar表中的标识符。
https://stackoverflow.com/questions/58539784
复制相似问题