Creo que debería hacer más preguntas antes de publicar esta respuesta, pero creo que estás haciendo las cosas en el orden incorrecto.
public function rentals($id)
{
// Retrieve all rentals within a region and the locations spatial data
$rentals = DB::table('rentals')
->join('regions', 'rentals.region_id', '=', 'regions.id')
->join('rental_locations', 'rentals.rental_location_id', '=', 'rental_locations.id')
->select('*')
->where('rentals.region_id', '=', $id)
->groupBy('rental_location_id')
->get();
return collect($rentals); // or return $rentals
/* Not necessary
// Create a collection from the array of query results
$rentals = collect($rentals);
// Laravel is set up to return collections as json when directly returned
return $rentals;
*/
}
Por lo tanto, debe agregar su groupBy en la consulta en sí porque esa es una acción de consulta que su SQL debería estar haciendo. La otra parte es que cuando lo conviertes en una colección (que no es 100% necesario) puedes devolverlo. Laravel maneja el JSON de forma nativa.