I have an array list of data I want to update to the inventory table.
$data['items'] = DB::table('inventory_items')->select('inventory_items.*')
->join('sorder_parts', 'inventory_items.id', 'sorder_parts.inventory_id')
->where('sorder_parts.sorder_id', '=', $id)
->selectraw('inventory_items.quantity - sorder_parts.quantity AS new_quantity')
->get()->toArray();
foreach ($data as $product_item) {
$reduce_quantity = InventoryItem::updateOrCreate(['id' => $product_item['items']['id']],
['quantity' => $product_item['quantity']['new_quantity']]);
}
Try this
$data['items'] = DB::table('inventory_items')
->select('inventory_items.*')
->join('sorder_parts', 'inventory_items.id', '=', 'sorder_parts.inventory_id')
->where('sorder_parts.sorder_id', '=', $id)
->selectRaw('inventory_items.id, inventory_items.quantity - sorder_parts.quantity AS new_quantity')
->get();
foreach ($data['items'] as $product_item) {
InventoryItem::updateOrCreate(
['id' => $product_item->id], // Use $product_item->id instead of $product_item['items']['id']
['quantity' => $product_item->new_quantity] // Use $product_item->new_quantity instead of $product_item['quantity']['new_quantity']
);
}