Возьмите следующий фрагмент кода. Я загружаю модель OrderDetail
с отношением к Inventory
:
// Load order details for live orders and inventory ids
$order_details = \OrderDetail::whereIn('order_id', $live_order_ids)
->whereIn('inventory_id', $inventory_ids)
->with('inventory')
->get();
После загрузки коллекции я выполняю следующую обработку:
// Deduct reserved stock from live un-picked orders
foreach ($order_details as $detail)
if (array_key_exists($detail->inventory->sku, $free_stocks))
$free_stocks[$detail->inventory->sku] -=
($detail->qty_ordered - $detail->qty_picked);
Как видите, из загруженной коллекции мне нужно только следующее:
- order_details.qty_ordered
- order_details.qty_picked
- инвентарь.sku
Я хотел бы оптимизировать это и загружать только то, что мне нужно, т.е. явно указать, какие столбцы я хочу загрузить из основной и связанной таблицы.
Как я могу это сделать? Когда я попробовал следующее, это, похоже, не работает:
// Load order details for live orders and inventory ids
$order_details = \OrderDetail::whereIn('order_id', $live_order_ids)
->whereIn('inventory_id', $inventory_ids)
->with('inventory')
->get(['qty_ordered','qty_picked','sku']);
// Load order details for live orders and inventory ids
$order_details = \OrderDetail::whereIn('order_id', $live_order_ids)
->whereIn('inventory_id', $inventory_ids)
->with(['inventory' => function($query) {
$query->addSelect(['id','sku']);
}])
->get(['qty_ordered','qty_picked']);
Любые идеи?