我将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删除计算列?
答案 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