我使用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.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,所以我按照每个设置了事件侦听器类。
恐怕你可能不走运,有一个开放的功能请求,但尚未实现:https://github.com/doctrine/doctrine2/issues/6434