繁体   English   中英

Laravel 5.5 Collection部分分组

[英]Laravel 5.5 Collection Partial Grouping

我需要有关如何按位置然后按大小将以下收藏分组的帮助:

[
    {
        "location_id": 1,
        "location_address": "Some address",
        "location_image": "https://some/image.url",
        "size_id": 1,
        "size_code": "S",
        "available_boxes": 3
    },
    {
        "location_id": 1,
        "location_address": "Some address",
        "location_image": "https://some/image.url",
        "size_id": 2,
        "size_code": "M",
        "available_boxes": 4
    },
    {
        "location_id": 1,
        "location_address": "Some address",
        "location_image": "https://some/image.url",
        "size_id": 3,
        "size_code": "L",
        "available_boxes": 5
    },
    {
        "location_id": 2,
        "location_address": "Some other address",
        "location_image": "https://some/other/image.url",
        "size_id": 4,
        "size_code": "XL",
        "available_boxes": 10
    }
]

这是预期的结果:

预期结果

真的很感激,在此先感谢!

可能不优雅,但这可以做到:

$locations = $this->records->unique('location_id');
$transformed = [];

foreach ($locations as $location) {
    $sizes = $this->records->whereStrict('location_id', $location->location_id);
    $transformedSizes = [];

    foreach ($sizes as $size) {
        $transformedSizes[] = [
            'id' => $size->size_id,
            'code' => $size->size_code,
            'available_boxes' => $size->available_boxes
        ];
    };

    $transformed[] = array_merge(
        [
            'id' => $location->location_id,
            'address' => $location->location_address,
            'image' => $location->location_image
        ],
        [
            'sizes' => $transformedSizes
        ]
    );
}

return $transformed;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM