带有迁移的生成的数据库字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有迁移的生成的数据库字段相关的知识,希望对你有一定的参考价值。
我有两个浮点字段:fieldA
和fieldB
。我想存储在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 项目。耙分贝:迁移不工作。已创建架构但无法生成测试数据
带有转义字段名称的 Scala 案例类在 Spark Catalyst 代码生成期间引发错误