如何在 Laravel 中以对象数组的形式获取连接结果?

git*_*ula 3 php mysql json laravel laravel-5

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

表:商店

  1. ID
  2. 店铺名称
  3. user_id(商店属于用户)

表:评级

  1. ID
  2. shop_id(外键)
  3. 评分
  4. 用户身份

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

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

当我这样做时,我得到了回复,但同一商店的每个评级都会重复该回复。

[
    {
        "id": 1,
        "name": "manjil",
        "rating": 4
    },
    {
        "id": 1,
        "name": "manjil",
        "rating": 5
    },
    {
        "id": 1,
        "name": "manjil",
        "rating": 2
    }]
Run Code Online (Sandbox Code Playgroud)

我真正想要的是:

        [{
            "id": 1,
            "name": "manjil",
            "rating": [4,5,2]
        }]
Run Code Online (Sandbox Code Playgroud)

请 Laravel 极客帮忙:)

N69*_*69S 5

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

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

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

$shops = $shops->map(function ($shop) {
    $shop->ratings = $shop->ratings->pluck('rating')->all();
    return $shop;
});
Run Code Online (Sandbox Code Playgroud)