I have been working on a personal project where users can rate different shops. Among many, I have two tables schemas that I am working on.
Table: Shops
Table : Ratings
Now I want to fetch all the shops and its corresponding ratings using SQL join.
$shop = Shop::leftJoin('ratings', 'ratings.shop_id', '=', 'shops.id')
->select('shops.*', 'ratings.rating')->get();
return response($shop);
When I do this I get response but the it is repeated for each ratings on the same shop.
[
{
"id": 1,
"name": "manjil",
"rating": 4
},
{
"id": 1,
"name": "manjil",
"rating": 5
},
{
"id": 1,
"name": "manjil",
"rating": 2
}]
What I really want is :
[{
"id": 1,
"name": "manjil",
"rating": [4,5,2]
}]
Please Laravel geeks, help :)
the easy solution would be to use the relation directly
$shops = Shop::with('ratings')->get();
//possible mapping here
return response($shops);
you can afterwards map the ratings to get only an array of the field rating
$shops = $shops->map(function ($shop) {
$shop->ratings = $shop->ratings->pluck('rating')->all();
return $shop;
});