我想使用Eloquent执行UPDATE
,这将使用同一个表的column_c
和column_a
值设置column_b
值。基本上,这样的事情:
User::where('id', '>', 0)
->update(['column_c' => $this->column_a + $this->column_b]);
其中$this->column_a
和$this->column_b
将当前行的实际值。
MySQL等效:
UPDATE `user` WHERE id > 0 SET column_c = column_a + column_b;
注意:上面的代码只是展示这个想法的一个例子。它不实际实现(这将创建数据库冗余)。
如何在Laravel 5.1中执行此类更新?我真的想避免使用foreach
。
答案 0 :(得分:9)
也许DB::raw
可以提供帮助。这将允许您使用任何标准的SQL查询来组合您的数据:
User::where('id', '>', 1)
->update(['column_c' => DB::raw( CONCAT(column_a, '-', column_b) )]);
答案 1 :(得分:2)
示例:
User::where('id', '>', 0)
->update(['column_c' => DB::raw('`column_a` + `column_b`']);
答案 2 :(得分:-1)
您可以使用覆盖..这样的事情:
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model {
public function save(array $options = []){
$this->column_a = $this->column_b;
parent::save($options);
}
}
编辑: 这也可能对你有所帮助: laravel model callbacks after save, before save, etc