我要做的是更新或插入表格中的行。在我的例子中,更新看起来像这样:
\DB::table('inventories')->where('product_code',$product_code)->increment('stock_current_quantity',$quantity);
我不想使用if else语句。我真正想要的是将增量集成到以下语句中,以便更新为上述语句。
\App\Inventory::updateOrCreate(['product_code' => $product_code], ['stock_current_quantity'=>$quantity]);
提前致谢!
答案 0 :(得分:4)
为什么不这样做:
$inventory = \App\Inventory::firstOrNew(['product_code' => $product_code]);
$inventory->stock_current_quantity = ($inventory->stock_current_quantity + $quantity);
$inventory->save();
如果模型不存在,$inventory->stock_current_quantity
只会等于$quantity
,否则会增加$quantity
。
答案 1 :(得分:1)
因为google将我带到了这里,我认为这里的答案,尤其是当您只想使用updateOrCreate时,并不像这样令人满意:
\App\Inventory::updateOrCreate([
'product_code' => $product_code
],
[
'stock_current_quantity' => \DB::raw('stock_current_quantity + 1')
]
);
贷记this guy
答案 2 :(得分:1)
我正在使用Laravel 7.8.1,并将其全部滚动为一条语句,如下所示:
$user->league_entries()->updateOrCreate([
'month' => $month,
'year' => $year
])->increment('score');
答案 3 :(得分:0)
如果其他人有这个问题,就贡献力量
它不存在,创建但具有零
self::firstOrNew(['product_code' => $product_code]);
然后,将其递增...如果其他进程在我之前将其更新为1(在firstOrNew和递增之间的中间时间),它将更新为2,以避免丢失先前的更新
self::where('product_code', $product_code)->increment('stock_current_quantity');