如何在 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 中将连接结果作为对象数组获取?的主要内容,如果未能解决你的问题,请参考以下文章