如何在 Laravel 中将连接结果作为对象数组获取?

Posted

技术标签:

【中文标题】如何在 Laravel 中将连接结果作为对象数组获取?【英文标题】:How to get join results as an array of objects in Laravel? 【发布时间】:2020-11-18 01:32:03 【问题描述】:

我一直在从事一个个人项目,用户可以对不同的商店进行评分。其中,我有两个正在处理的表模式。

表:商店

    身份证 店铺名称 user_id(商店属于用户)

表格:评分

    身份证 shop_id (foreign_key) 评分 user_id

现在我想使用 SQL 连接获取所有商店及其对应的评分。

 $shop = Shop::leftJoin('ratings', 'ratings.shop_id', '=', 'shops.id')
    ->select('shops.*', 'ratings.rating')->get();
    return response($shop);

当我这样做时,我会得到响应,但对于同一家商店的每个评级都会重复。

[
    
        "id": 1,
        "name": "manjil",
        "rating": 4
    ,
    
        "id": 1,
        "name": "manjil",
        "rating": 5
    ,
    
        "id": 1,
        "name": "manjil",
        "rating": 2
    ]

我真正想要的是:

        [
            "id": 1,
            "name": "manjil",
            "rating": [4,5,2]
        ]

请 Laravel 极客帮忙 :)

【问题讨论】:

->get();之前尝试->groupBy('rating'); 【参考方案1】:

简单的解决方案是直接使用关系

$shops = Shop::with('ratings')->get();
//possible mapping here
return response($shops);

之后您可以映射评级以仅获取字段数组rating

$shops = $shops->map(function ($shop) 
    $shop->ratings = $shop->ratings->pluck('rating')->all();
    return $shop;
);

【讨论】:

以上是关于如何在 Laravel 中将连接结果作为对象数组获取?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 5.5 中将数组作为 API 资源返回

无法在laravel中将数组数组转换为没有索引的对象数组

在laravel中将对象转换为数组[重复]

在laravel中将对象转换为数组[重复]

在 Laravel 中将二维数组转换为 json 对象

如何在Java中将对象数组作为参数传递