如何防止Doctrine删除计算/生成的列

时间:2018-06-12 09:32:19

标签: php symfony doctrine-orm mariadb

我将MariaDB用于Symfony项目,并设置了一个计算列:

ALTER TABLE history_event ADD quote_status_change SMALLINT AS (JSON_VALUE(payload, '$.change_set.status[1]'));

当我使用bin/console doctrine:schema:update运行Doctrine迁移时,计算列将被删除,可能是因为它没有出现在HistoryEvent实体类的任何位置。

如何在运行迁移时阻止Doctrine删除计算列?

2 个答案:

答案 0 :(得分:1)

我使用OnSchemaColumnDefinition Event在教义2.10中解决了这个问题。我的代码如下所示:

public function onSchemaColumnDefinition(SchemaColumnDefinitionEventArgs $eventArgs)
{
    if ($eventArgs->getTable() === 'my_table') {
        if (!in_array($eventArgs->getTableColumn()['field'], ['id', 'column_1', 'column_2'])) {
            $eventArgs->preventDefault();
        }
    }
}

在我的情况下,我使用的是Symfony 4.2,因此我将事件监听器类设置为as per

答案 1 :(得分:0)

恐怕您可能不走运,有一个开放功能请求,但尚未实现:https://github.com/doctrine/doctrine2/issues/6434