在laravel中增加updateOrCreate

时间:2015-10-17 02:24:01

标签: laravel eloquent laravel-5.1 illuminate-container

我要做的是更新或插入表格中的行。在我的例子中,更新看起来像这样:

\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 个答案:

答案 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');