在原则中设置@JoinColumn名称

问题描述 投票:0回答:1

在我正在研究的项目中,我们仅将教义用作ORM,这意味着我们不使用教义迁移。我正在尝试映射一个具有现有OneToMany关联的列(来自现有表):

    /**
     * @var InternalUser
     * @ORM\ManyToOne(targetEntity="App\Entity\InternalUser", inversedBy="blocos")
     * @ORM\JoinColumn(nullable=false, name="owner")
     */
    private $owner;

问题是列名仅是owner而不是owner_id,但是在查询数据库时,例如,使用->find('id'),则主义将_id后缀附加到列名,从而生成如下查询:

SELECT .... t0.owner_id AS owner_id_6 FROM ... 

并且当执行查询时,我得到一个Undefined column: 7 ERROR: column t0.owner_id does not exist,因为正确的名称只是'所有者'。

[我尝试在@JoinColumn批注中将namereferencedColumnName都设置为"owner",但无论如何都会附加_id后缀。

我也看过naming strategies,但它似乎并不负责_id后缀(我使用的是symfony4随附的默认UnderscoreNamingStrategy

反正有没有将学说配置为not添加'_id'后缀?

PS:不能更改列名]

谢谢

php symfony doctrine-orm doctrine
1个回答
0
投票

[name正是为此而设计的,当您使用它时,原则应正确映射。

现在,您在这里提到->find('id')似乎很尴尬。

如果您有表A,并且您希望基于该表的id查找内容是在使用->find($id)时,它将查找该表的ID。

但是您正在谈论一种关系,在这种情况下,您应该使用findBy(['field' => $value])findOneBy(['field' => $value])

如果没有此帮助,您能否显示正在使用的确切查询以及关系的两侧?

© www.soinside.com 2019 - 2024. All rights reserved.