使用其他列值进行Eloquent更新

les*_*gar 11 php laravel eloquent laravel-5

我想执行UPDATE使用滔滔不绝,将设置column_c的使用值值column_acolumn_b同桌.基本上,这样的事情:

User::where('id', '>', 0)
        ->update(['column_c' => $this->column_a + $this->column_b]);
Run Code Online (Sandbox Code Playgroud)

where $this->column_a$this->column_b 将是当前行的实际值.

MySQL等价物:

UPDATE `user` WHERE id > 0 SET column_c = column_a + column_b;
Run Code Online (Sandbox Code Playgroud)

注意:上面的代码只是展示这个想法的一个例子.这不是实际的实现(这将创建数据库冗余).

如何在Laravel 5.1中执行此类更新?我真的想避免一个foreach.

Pᴇʜ*_*Pᴇʜ 17

也许DB::raw可以帮忙.这将允许您使用任何标准的SQL查询来组合您的数据:

User::where('id', '>', 1)
    ->update(['column_c' => DB::raw( CONCAT(column_a, '-', column_b) )]);
Run Code Online (Sandbox Code Playgroud)

  • 当然,我知道`DB :: raw()`很方便,但是我发现它是高级查询的“解决方法”,这些高级查询很难用Eloquent或Query Builder构建。非常令人失望的是,在MySQL中如此容易完成的事情(如我的帖子中所示)在Laravel中无法立即使用。不管怎样,谢谢 :) (2认同)

小智 5

例子:

User::where('id', '>', 0)
    ->update(['column_c' => DB::raw('`column_a` + `column_b`') ]);
Run Code Online (Sandbox Code Playgroud)