可以使用自定义索引与COALESCE和symfony make-bundle

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

我有一个不寻常的索引,它包括:

some_field
COALESCE(other_field, 0)
所以我尝试在我的实体的描述中使用它


#[ORM\UniqueConstraint(
    name: 'some_index',
    columns: ['some_field', 'COALESCE(other_field, 0)']
)]

当然,在运行命令

php bin/console make:migration
php bin/console doctrine:migrations:diff
时,学说找不到这样的列并返回错误:

 There is no column with name "COALESCE(other_field, 0)" on table "..."

是否有任何可能的方法可以继续使用

maker-bundle
doctine-bundle
中的命令来生成新的迁移而不会出现此类错误?

php postgresql doctrine-orm doctrine
2个回答
0
投票

不幸的是,Doctrine 不直接在其模式管理中支持像 COALESCE() 这样的复杂 SQL 函数(例如,在生成迁移或实体映射时),因此它将 COALESCE(other_field, 0) 视为列名,因此错误。

您可以手动管理迁移中的自定义索引,否则必须使用忽略 Doctrine Schema 中的索引

php bin/console doctrine:schema:update --dump-sql

0
投票

如果有人对在执行命令时消除此类错误的想法感兴趣,我意识到为学说的实体添加虚拟财产:

#[ORM\Column(name: 'COALESCE(other_field, 0)', nullable: true, insertable: false, updatable: false)]
    private ?string $virtualField = null;

现在它正在生成额外的字段(sql 查询),但没有任何错误。

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