php - 如何防止 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 在运行迁移时删除计算列?
解决方案
我在教义 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,所以我按照.
推荐阅读
- javascript - 深度合并两个json对象es6
- google-bigquery - BigQuery 在 2019 年 10 月 29 日中断?
- python - 如何在多个命名输入估计器模型上使用 Tensorflow Serving RESTful API?
- r - 理解 [.... with=F][[1]] 的含义
- html - 如何在视图按钮上添加模式弹出窗口?
- swift - ARkit函数setWorldOrigin旋转和飘走的问题
- c - 有没有更简单的方法来编译这个项目
- javascript - 使用 systemjs 编译的 TypeScript 未登录到控制台
- ios - 当我的表格视图中没有要显示的数据时,如何显示返回消息?
- java - 如何在达到最大尝试次数时停止以及如果答案错误留在同一个问题中