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

时间:2020-05-24 10:46:22

标签: laravel laravel-5 eloquent

我有两个浮点字段:fieldAfieldB。我想存储在数据库浮动字段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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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;
        });
    }
}