Добрый день, я создал скрипт для решения ERP, в котором товары хранятся в таблице запасов, причем один и тот же SKU появляется несколько раз с разными количествами и партиями. Когда я продаю товары, я хочу, чтобы количество на складе рассматривалось как сумма всех товаров с одним и тем же SKU, например:
|item_id |item_sku| item_quantity| lot|
|1 |10101001| 0 | xyz |
|2 |10101002| 5 | 012 |
|3 |10101001| 6 | 123 |
|4 |10101001| 7 | 456 |
|5 |10101001| 8 | yf3 |
Если я продам 14 единиц 10101001, как бы я go о написании кода, который оставит item_id [1] нетронутым (поскольку его item_quantity равен <1), возьмет все количество из item_id [3] и из item_id [4] и уменьшит поле количества item_id [5] на 1 <code>(14 = 6+7+1) в объектно-ориентированном подходе? Я думал об использовании для каждого l oop, но все, что я получил, это уменьшил поле количества по всем строкам - так что, возможно, я не пишу это правильно. Кроме того, я подумал о том, чтобы рассматривать item_quantity как сумму, поэтому группировать по SKU, суммировать поле item_quantity, а затем вычитать sold_quantity из этой суммы, но тогда как бы мне go снова распределить количества в строках базы данных? Я действительно застрял здесь, и этот вопрос сводит меня с ума с вечера понедельника. Любая помощь будет оценена. LE: Вот мой код:
$toSell = $value['sales_quantity'];
$sum = StockDetail::where('sku', $product['sku'])->sum('stock_quantity');
$updatedStock = $sum - $toSell;
// StockDetail::where('sku', $product['sku'])->update(['stock_quantity' => $updatedStock]); // doesn't work for lots
foreach($salesProduct as $key => $value) {
//
// more code here which is irrelevant to the issue I'm facing
//
foreach($stockNotNull as $stock => $product) {
if($toSell === 0) {
return;
}
do {
$product->stock_quantity->decrement();
$toSell--;
if ($product->stock_quantity === 0) {
continue;
}
} while($product->stock_quantity > 0 && $toSell > 0);
}
}