gpt4 book ai didi

mysql - Laravel - Group By 和 Key By 在一起

转载 作者:行者123 更新时间:2023-11-29 01:06:18 24 4
gpt4 key购买 nike

假设我有以下 MySQL 表来表示价格手册、项目以及它们之间的关系:

item - item_id|name|...etc
pricebook - pricebook_id|name|...etc

和下面的数据透视表

pricebook_item - pricebook_id|item_id|price|...etc

我有相关的 Eloquent 模型:PricebookItem 和一个名为 PricebookData 的存储库来检索必要的信息。

PricebookData 存储库中,我需要获取按价格簿 ID 分组的价格簿数据,然后按 item_id 键控以便在客户端轻松访问。

如果我这样做:

Pricebook::all()->groupBy('pricebook_id');

我得到按 pricebook_id 分组的信息,但在每个价格手册中,键是简单的数字索引(它作为 js 数组到达)而不是实际的 product_id。所以当返回到客户端Javascript时,结果如下:

pricebookData: {1: [{}, {}, {}...], 2: [{}, {}, {}...]}

价格作为数组到达的问题是,如果不迭代数组我就无法轻松访问它。理想情况下,我将能够收到它:

 pricebookData: {1: {1001:{}, 1002: {}, 1003: {}}, 2: {1001:{}, 1002: {}, 1003: {}}}
//where 1001, 1002, 1003 are actual item ids
//with this result format, I could simply do var price = pricebookData[1][1001]

我也试过以下但没有成功:

Pricebook::all()->keyBy('item_id')->groupBy('pricebook_id');

我试图避免的等价物是:

$prices = Pricebook::all();
$priceData = [];
foreach ($prices as $price)
{
if (!isset($priceData[$price->pricebook_id]))
{
$priceData[$price->pricebook_id] = [];
}
$priceData[$price->pricebook_id][$price->item_id] = $price;
}
return $priceData;

我正在尝试寻找一个纯粹优雅的 Eloquent/Query Builder 解决方案。

最佳答案

我觉得你想要的是

Pricebook::all()
->groupBy('pricebook_id')
->map(function ($pb) { return $pb->keyBy('item_id'); });

您首先按 Pricebook 分组,然后每个 Pricebook 子集由 item_id 键控。你在正确的轨道上

Pricebook::all()->keyBy('item_id')->groupBy('pricebook_id');

不幸的是,在实现时,groupBy 重置了以前的键。

更新:

Pricebook::all()->keyBy('item_id')->groupBy('pricebook_id', true);

(groupBy 第二个参数$preserveKeys)

关于mysql - Laravel - Group By 和 Key By 在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38710694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com