Doctrine ManyToMany with referencedColumnName



我有两个具有多对多关系的模型。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 AppEntityFoo towards AppEntityBar 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;
}

这不起作用,我得到了同样的错误。怎么办?

您的关联映射应该是这样的:

class Bar
{
/**
* @var Foo[]|DoctrineCommonCollectionsCollection
*
* @ORMManyToMany(targetEntity="Foo", inversedBy="bar")
* @ORMJoinTable(
*     name="table1_table2",
*     joinColumns={
*          @ORMJoinColumn(name="foo_uid", referencedColumnName="uniqueIdentifier")
*     },
*     inverseJoinColumns={
*          @ORMJoinColumn(name="bar_uid", referencedColumnName="uniqueIdentifier")
*     }
* )
*/
private $foo;
}
class Foo {
/**
* @var Bar[]|DoctrineCommonCollectionsCollection 
* 
* @ORMManyToMany(targetEntity="Bar", mappedBy="foo")
*/
private $bar;
}

请记住,foo_uidbar_uid列将在table1_table2表中,而uniqueIdentifier是Foo和Bar表上的标识符。

相关内容

  • 没有找到相关文章

最新更新