【问题标题】:Laravel select specific column when eager loading collectionLaravel在急切加载集合时选择特定列
【发布时间】:2015-05-08 00:03:27
【问题描述】:

取下面的代码sn-p。我正在加载与Inventory 有关系的OrderDetail 模型:

// 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
  • inventory.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']);

有什么想法吗?

【问题讨论】:

标签: php laravel laravel-4 orm eloquent


【解决方案1】:

您需要在查询中使用 select 来获取选定的列。或者如果它不起作用,你需要使用 laravel 连接。

另请参阅 laravel 官方文档中查询的​​选择列。 http://laravel.com/docs/4.2/queries

// 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']);
    }])
    ->select('qty_ordered','qty_picked')
->get();

【讨论】:

  • 或者这样。 $order_details = \OrderDetail::whereIn('order_id', $live_order_ids) ->whereIn('inventory_id', $inventory_ids) ->inventory() ->get(['inventory.sku','qty_ordered','qty_picked' ])->toArray();
猜你喜欢
  • 2021-01-21
  • 1970-01-01
  • 2020-01-13
  • 2019-07-29
  • 2014-11-12
  • 1970-01-01
  • 2021-04-17
  • 2014-10-31
  • 1970-01-01
相关资源
最近更新 更多