Witam, mam do zrobie wyświetlanie popularnych samochodów. Mam zrobioną relacje many-to-many i działa jak należy. Problem prawie rozwiązałem ale mam problem z prawidłowym wyświetleniem tego. Mam tablice cars(w niej znajduja się wszystkie samochody dodane przez admina), następnie mam utworzoną tablice user. Połączone sa relacja i utworzylem 3 tablice w której są podane ID samochodu ID usera i termin w jakim wypożyczył samochód. Popularność będą wskazywać gwiazdki z bootstrapa.
I mam problem z poprawienie wyświetlania gdyż wyświetla mi samochody i gwiazdki, ale nie tak jak powinno.


Controller
  1. public function popularityCar()
  2. {
  3. $cars = User::with('rentcar')->get();
  4. $car_pops = DB::table('rent_car')
  5. ->select('car_id', DB::raw('count(*) as total'))
  6. ->groupBy('car_id')
  7. ->get();
  8. return view('user.popularityCar',['cars' => $cars, 'car_pops' => $car_pops]);
  9. }

Model User
  1. public function rentcar()
  2. {
  3. return $this->belongsToMany(Cars::class,'rent_car','user_id','car_id')->withTimestamps()->withPivot('start', 'end');
  4. }

Model Cars
  1. public function caruser()
  2. {
  3. return $this->belongsToMany(User::class,'rent_car','car_id','user_id');
  4. }

Widok:
  1. @extends('layouts.app')
  2.  
  3. @section('content')
  4. <div class="container">
  5. <div class="row">
  6. <div class="col-md-8 col-md-offset-2">
  7. <div class="panel panel-default">
  8. <div class="panel-heading">Popularity Car</div>
  9. <div class="panel-body">
  10. <table class="table table-striped">
  11. <tr>
  12. <th>#</th>
  13. <th>Name Car</th>
  14. <th>Popularity</th>
  15. </tr>
  16. </thead>
  17. <?php $i = 1;?>
  18. @foreach($cars as $car)
  19. @foreach($car->rentcar as $rentcar)
  20. <tr>
  21. <td>{{ $i++ }}</td>
  22. <td>{{$rentcar->name}}</td>
  23. @foreach($car_pops as $car_pop)
  24. <td>
  25. @if($car_pop->total == '1')
  26. <span class="glyphicon glyphicon-star"></span>
  27. @elseif($car_pop->total == '2')
  28. <span class="glyphicon glyphicon-star"></span>
  29. <span class="glyphicon glyphicon-star"></span>
  30. @endif
  31. </td>
  32. @endforeach
  33. </tr>
  34. @endforeach
  35. @endforeach
  36. </tbody>
  37. </table>
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. @endsection

Ogólnie szukałem rozwiązania na necie i zrobilem tak jak mam w kontrolerze, mam pytanie czy da rade zrobic groupBy i count dla zapytania z relacja(chodzi mi o to czy da rade $cars = User::with('rentcar')->get(); przerobić te zapytanie, żebym nie musiał tworzyć innego tzn dodać do tego groupBy i count jak zrobione mam przy zmiennej $car_pops , wtedy wiedziałbym jak poprawnie to wyświetlić ). Próbowałem już na różne sposoby użyć groupBy i counta w zmiennej $cars ale nic mi nie wychodziło i szczerze nie mam pojęcia jak to rozwiązać.
Na zdjęciu są przykładowe samochody i w tablicy jest ze na audi zapisały sie 2 osoby i co za tym idzie powinny być 2 gwiazdki, a na bwm 1 osoba i 1 gwiazdka.


Zrobiłem coś takiego, ale nie wiem jak odwołać sie do kolumny car_id, która jest w tablicy rent_car(tablica odpowiedzialna za relacje miedzy userem a samochodami)
  1. $total_raw = DB::raw('count(*) as total');
  2. $cars = User::with('rentcar')
  3. ->where('rentcar')
  4. ->select('car_id', $total_raw)
  5. ->groupBy('car_id')
  6. ->get();