是否可以更新时间戳(updated_at
除外)并在一个查询中增加一列?我显然可以->increment('count')
和单独->update(['last_count_increased_at' => Carbon::now()])
,但有一种简单的方法可以同时进行。
Product::where('product_id', $product->id)
->update(['count'=>count+1, 'last_count_increased_at' => Carbon::now()];
无需先查询并获取计数?
答案 0 :(得分:15)
您可以使用DB::raw
方法:
Product::where('product_id', $product->id)
->update([
'count'=> DB::raw('count+1'),
'last_count_increased_at' => Carbon::now()
]);
答案 1 :(得分:3)
您可以指定在操作期间要更新的其他列:
Product::where('product_id', $product->id)
->increment('count', 1, ['last_count_increased_at' => Carbon::now()]);
答案 2 :(得分:0)
使用 Laravel 8,您现在可以在单个查询中实现这一点,以创建或更新重复键。
$values = [
'name' => 'Something',
'count' => 1,
];
$uniqueBy = ['name'];
$update = ['count' => DB::raw('count+1')];
Model::upsert($values, $uniqueBy, $update);
如果模型存在,count
将递增,如果插入,count
将等于 1
。这是在 DB 级别完成的,因此只涉及一个查询。
阅读有关 upsert 的更多信息:https://laravel.com/docs/8.x/eloquent#upserts