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

标签 php mysql json laravel laravel-5

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

表:商店

  1. 编号
  2. 店名
  3. user_id(店铺属于某个用户)

表:评分

  1. 编号
  2. shop_id(外键)
  3. 评分
  4. 用户编号

现在我想使用 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极客们帮忙:)

最佳答案

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

$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;
});

关于php - 如何在 Laravel 中将连接结果作为对象数组获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63137003/

相关文章:

mysql - 在 Rails 中删除 mysql 表

javascript - 从数组中检索对象,其中另一个对象与另一个数组匹配

javascript - 无法显示 angularJS 范围组件

javascript - 在 JAVASCRIPT 中运行 FFMPEG 命令

PHP 生成的表列数据不在正确的位置?

MySQL 在一个 SELECT 中获取不同 GROUP BY 上的 COUNT 和 SUM

mysql - 更改标识符 user_id 的名称

json - 如何从不寻常的 JSON 存储创建 Ext.data.Store?

javascript - 使用 Flask 在 iOS 上进行 JSON POST

php - 如何替换PHP中固定位置的字符?