教义ManyToMany与referencedColumnName

时间:2019-10-24 10:52:47

标签: php database doctrine-orm doctrine

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

}

这不起作用,并且出现相同的错误。怎么办?

1 个答案:

答案 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表的标识符。