Php 如何防止条令删除计算/生成列

Php 如何防止条令删除计算/生成列,php,symfony,doctrine-orm,mariadb,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运行条令迁移时,计算列被删除,可能是因为它没有出现在HistoryEvent实体类中的任何位置 如何防止运行迁移时Doctri

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

ALTER TABLE history_event ADD quote_status_change SMALLINT AS (JSON_VALUE(payload, '$.change_set.status[1]'));
当我使用
bin/console-Doctrine:schema:update
运行条令迁移时,计算列被删除,可能是因为它没有出现在
HistoryEvent
实体类中的任何位置


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

我担心您可能运气不好,有一个开放的功能请求,但尚未实现:

我担心您可能运气不好,有一个开放的功能请求,但尚未实现:

我在Doctrine 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,因此我设置了事件侦听器类。

我在原则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,因此我设置了事件侦听器类。

我担心您可能会走运:@malarzm如果您将此作为答案发布,我将很乐意接受。这是正确的答案。谢谢你的帮助!使用迁移来赢取我担心你可能会走运:@malarzm如果你将此作为答案发布,我将很乐意接受。这是正确的答案。谢谢你的帮助!使用迁移获得胜利这应该是答案,在Symfony 3.4上对我们也有效。为了完整起见,这是yaml部分:framework.listener.schema:class:SymfonyBundle\EventListener\DoctrineSchemaListener标记:-{name:doctrine.event\u listener,event:onSchemaColumnDefinition}这应该是答案,在Symfony 3.4上也适用于我们。为了完整性起见,这是yaml部分:framework.listener.schema:class:SymfonyBundle\EventListener\DoctrineSchemaListener标记:-{name:doctrine.event\u listener,event:onSchemaColumnDefinition}