我有两个具有多对多关系的模型。该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
。我知道这是由于在理论上默认将内容映射到_id
(对于引用列名称)和table1_table2
(对于连接表)。
我无法覆盖默认值,因为一些模型确实具有自动生成的值并且依赖于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;
}
这不起作用,并且出现相同的错误。怎么办?
答案 0 :(得分:1)
您的关联映射应如下所示:
G_TYPE_ENUM
请记住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
是Foo's和Bar表的标识符。