首页 > 解决方案 > 如何防止 Doctrine 删除计算/生成的列

问题描述

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

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

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

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

标签: phpsymfonydoctrine-ormmariadb

解决方案


我在教义 2.10 中使用OnSchemaColumnDefinition Event解决了这个问题。我的代码看起来像这样:

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,所以我按照.


推荐阅读