He estado trabajando en un proyecto personal donde los usuarios pueden calificar diferentes tiendas. Entre muchos, tengo dos esquemas de tablas en los que estoy trabajando.
Tabla: Tiendas
Tabla: Calificaciones
Ahora quiero buscar todas las tiendas y sus calificaciones correspondientes usando SQL join.
$shop = Shop::leftJoin('ratings', 'ratings.shop_id', '=', 'shops.id') ->select('shops.*', 'ratings.rating')->get(); return response($shop);Cuando hago esto, obtengo una respuesta, pero se repite para cada calificación en la misma tienda.
[ { "id": 1, "name": "manjil", "rating": 4 }, { "id": 1, "name": "manjil", "rating": 5 }, { "id": 1, "name": "manjil", "rating": 2 }]Lo que realmente quiero es:
[{ "id": 1, "name": "manjil", "rating": [4,5,2] }]Por favor, geeks de Laravel, ayuda :)
la solución fácil sería usar la relación directamente
$shops = Shop::with('ratings')->get(); //possible mapping here return response($shops); luego puede mapear las calificaciones para obtener solo una matriz de la rating de campo
$shops = $shops->map(function ($shop) { $shop->ratings = $shop->ratings->pluck('rating')->all(); return $shop; });