带有迁移的生成的数据库字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有迁移的生成的数据库字段相关的知识,希望对你有一定的参考价值。

我有两个浮点字段:fieldAfieldB。我想存储在DB浮动字段fieldC中,该字段将始终具有值:fieldA * fieldB

我想通过迁移来实现。这是我尝试过的

$table->float('fieldC', 12, 2)->storedAs('fieldA * fieldB');

$table->float('fieldC', 12, 2)->storedAs('MULTIPLY(fieldA, fieldB)');

两者都不起作用。错误为Column not found: 1054 Unknown column 'fieldA'General error: 1901 Function or expression 'MULTIPLY()' cannot be used

有什么建议吗?

答案

Laravel迁移不支持。但是您可以使用原始语句来触发。像这样的东西:

DB::unprepared("
    DELIMITER $$

CREATE TRIGGER after_update
AFTER UPDATE
ON tableName FOR EACH ROW
BEGIN
    IF old.fieldA <> new.fieldA OR old.fieldB <> new.fieldB THEN
        UPDATE tableName SET fieldC=fieldA+fieldB WHERE id=new.id;
    END IF;
END$$

DELIMITER ;
");

您可以使用Laravel模型使其更简单

<?php
class YourModel extends Model {
    public static function boot()
    {
        parent::boot();
        self::saving(function($model){
            $model->fieldC = $model->fieldA + $model->fieldB;
        });
    }
}

以上是关于带有迁移的生成的数据库字段的主要内容,如果未能解决你的问题,请参考以下文章

带有角膜宝石和 sqlite 的 Sinatra 项目。耙分贝:迁移不工作。已创建架构但无法生成测试数据

Django迁移默认值可调用生成相同的条目

带有转义字段名称的 Scala 案例类在 Spark Catalyst 代码生成期间引发错误

使用 SequelizeJS 编写带有外键的迁移

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

从数据库迁移