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

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

表:商店

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

表格:评分

  1. 身份证
  2. shop_id (foreign_key)
  3. 评分
  4. 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');

标签: php mysql json laravel laravel-5


【解决方案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;
});

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 2015-07-28
    • 2020-12-03
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多