使用其他列值进行Eloquent更新

时间:2015-06-29 14:17:37

标签: php laravel eloquent laravel-5

我想使用Eloquent执行UPDATE,这将使用同一个表的column_ccolumn_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

3 个答案:

答案 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