我有两个浮点字段:fieldA
和fieldB
。我想存储在数据库浮动字段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
。
有什么建议吗?
答案 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;
});
}
}