2015-10-17 1 views
1

То, что я пытаюсь сделать, это обновить или вставить строку в таблицу. В моем случае обновление выглядит примерно так:updateOrCreate with increment in laravel

\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

Почему вы не используете Красноречивый? Это так легко с Eloquent Model. –

ответ

2

Почему бы не сделать:

$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.

+0

большое спасибо! :) Я просто придерживался метода updateOrCreate !!! –

+0

Добро пожаловать! –

+0

Существует небольшой риск того, что база данных 'stock_current_quantity' может измениться между восстановлением элемента и сохранением его. Вот почему 'increment' безопаснее использовать – andrewtweber