11

我想要做的是更新或插入表中的行。就我而言,更新看起来像这样:

\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]);

提前致谢!

4

4 回答 4

21

因为谷歌把我带到了这里,我认为这里的答案,特别是当你只是想使用 updateOrCreate 时,并不像这样令人满意:

\App\Inventory::updateOrCreate([
         'product_code' => $product_code
    ], 
    [
         'stock_current_quantity' => \DB::raw('stock_current_quantity + 1')
    ]
);

归功于这个人

于 2019-04-21T23:28:24.610 回答
11

为什么不这样做:

$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

于 2015-10-17T07:20:32.073 回答
5

我正在使用 Laravel 7.8.1 并将其全部整合到一个语句中,如下所示:

    $user->league_entries()->updateOrCreate([
        'month' => $month,
        'year' => $year
    ])->increment('score');
于 2020-11-10T13:18:11.493 回答
1

如果其他人有这个问题,只是贡献

它不存在,创建,但为零

self::firstOrNew(['product_code' => $product_code]);

然后,递增它...如果其他进程在我之前将其更新为 1(在 firstOrNew 和递增之间的中间时间),这将更新为 2,避免丢失先前的更新

self::where('product_code', $product_code)->increment('stock_current_quantity');
于 2018-08-17T15:17:07.497 回答