Laravel 6 - продукт декремента при продаже - PullRequest
0 голосов
/ 26 марта 2020

Я хочу отслеживать продукты на складе для каждого проданного. У меня есть Sale и Product таблицы, которые Many-to-Many друг другу.

enter image description here

In Product Model

    public function sales()
    {
        return $this->belongsToMany(\App\Sale::class)->withPivot('quantity', 'unit_price');
    }

In Sale Model

    public function products()
    {
        return $this->belongsToMany(\App\Product::class)->withPivot('quantity', 'unit_price');
    }

In SaleController

public function update(Request $request, $id)
    {
        ...

        foreach($sale->products as $sale) {
            $product = Product::find($sale->id);
            $product->decrement('unit', $sale->pivot->quantity);
        } 

        return response()->json(['updated' => true]);
    }

Да, это работает, но, Проблема в том, что> Пример. У меня есть 10 товаров, когда добавляется продажа 2, товара остается 8, но когда я редактирую эту продажу на 1, товар на складе остается 7

Это не имеет смысла Единица продукта должна быть 8, а не 7.

Любая помощь? Спасибо

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Не зная больше, я имею два подхода:

  1. ОБНОВИТЬ значение remain относительно:
    • получить предыдущее количество
    • Вычесть новое количество
    • Если результат положительный, вычтите его из значения remain
    • Если он отрицательный, добавьте его к значению remain
  2. Пересчитать значение remain
    • ОБНОВИТЬ таблицу sale без изменить значение remain
    • Получить значение products из таблицы sales и вычислите значение remain на основе текущих значений quantity
0 голосов
/ 26 марта 2020

для уменьшения или вычитания, вы должны использовать

$product->decrement('unit', $sale->pivot->quantity);

для увеличения или добавления, используйте

$product->increment('unit', $sale->pivot->quantity);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...