我有一张库存变动表,它显示了一个产品的历史记录(接收、移动位置等)。
我有两个查询(通过合计金额计算):
这两个查询都返回相同模型的集合。它们的结果总是相同的,而product的结果总是相同的。唯一不同的部分是接收到的/活的数量,我想以某种方式将各个记录合并到一个新的集合中。即
查询1中的单个记录:
0 => StockMovement {#1602 ▼
#original: array:2 [▼
"live_qty" => "8"
"product_id" => "2606598e-4150-461a-9e91-10d67cce8daa"
]
}查询2中的单个记录;
0 => StockMovement {#1602 ▼
#original: array:2 [▼
"received_qty" => "15"
"product_id" => "2606598e-4150-461a-9e91-10d67cce8daa"
]
}我试图得到一个合并的结果,如下所示:
0 => StockMovement {#1602 ▼
#original: array:3 [▼
"received_qty" => "15"
"live_qty" => "8"
"product_id" => "2606598e-4150-461a-9e91-10d67cce8daa"
]
}我想以一种不将Product转换为数组的方式这样做,因为我需要嵌入其中的关系。
目前,我对此进行了如下攻击:
$live = $this->liveQtyCollection();
$merged = $this->receivedQtyCollection()->map(function(StockMovement $received) use($live){
$line = $live->where('product_id', $received->product_id)->first();
return arrayToObject(array_merge($received->toArray(), $line->toArray()));
});
return $merged;arrayToObject函数,递归地将数组转换回对象,以便我可以使用箭头选择器的方式与其原始集合的方式相同,但我确信一定有更好的方法!
我试过:
我的最终目标是能够按以下方式使用结果集合:
@foreach($stockMovements as $stockMovement)
{{ $stockMovement->id }}
{{ $stockMovement->live_qty }}
{{ $stockMovement->received_qty }}
@endforeach发布于 2019-04-17 20:38:48
您可以使用以下代码:
$collection = collect();
$cars = Car::all();
$bikes = Bike::all();
foreach ($cars as $car)
$collection->push($car);
foreach ($bikes as $bike)
$collection->push($bike);发布于 2020-12-04 02:54:25
我知道你在你的问题中提到,你并不是指集合,而且你已经尝试过合并,但是为了讨论,我想我应该把我的答案放在混合中,因为这正是我所需要的;合并了两个模型调用的响应。
$quote = \App\AllQuotes::withoutGlobalScopes()->find($quote_id);
$settings = \App\Settings::findOrFail(1);
$settings = collect($settings);
$quote = collect($quote);
$merged = $quote->merge($settings);
return $merged;您必须首先将模型响应封装为集合,然后将它们合并在一起。然后,输出将其视为一个逻辑连接,将来自两个模型的数据保持在一个单一输出中。
发布于 2019-04-17 21:29:09
你可以这样做:
$live = $this->liveQtyCollection()->keyBy('product_id')
$merged = $this->receivedQtyCollection()->map(function(StockMovement $received) use($live){
$received->live_qty = $live->get($received->product_id)->live_qty ?? null;
return $received;
});https://stackoverflow.com/questions/55734956
复制相似问题