我正在尝试获取一个具有索引作为列值的集合。
第一层将具有product_id
作为索引,第二层将具有stock_date
。
$data = Model::select('column1', 'product_id', 'stock_date')
->where('some condition')
->get();
$data = collect($data)->groupBy('product_id');
使用上面的代码,我得到了以product_id
作为索引的集合。
我需要用stock_date
索引的每个产品的数据
例如,如果对于product_id
-1
,我有多条记录,我尝试过
$product_details = collect($data[1])->groupBy('stock_date');
但是它不会进一步stock_date
索引记录。
需要帮助,以stock_date
为它们编制索引。
答案 0 :(得分:1)
您是说这些记录是按stock_date嵌套的,
然后将product_id嵌套stock_date
如果是,请尝试以下操作,collect()
方法使所有嵌套记录成为集合,您无需再次使用collect()
。
$data = Model::select('column1', 'product_id', 'stock_date')
->where('some condition')
->get();
$data = collect($data)->groupBy('product_id');
$nested_products = [];
foreach($data as $product_id => $items) {
$nested_products []= $items->groupBy('stock_date');
}
或者您可以尝试以下行,它更优雅:
collect($data)->groupBy('product_id')->transform(function($item, $k) { return $item->groupBy('stock_date');})
答案 1 :(得分:1)
可能的解决方案。
// first index grouped by product_id
$original = Model::select('column1', 'product_id', 'stock_date')
->where('some condition')
->get()
->groupBy->product_id;
$final = collect();
// iterate through each group and
// group inner collection with 'stock_date'
// and put them back in an collecion
foreach($original as $key => $value) {
$final->put($key, $value->groupBy->stock_date);
}