Выполнение итерации цикла в Laravel Eloquent - PullRequest
0 голосов
/ 11 октября 2019

У меня есть модель $ club, которая связана с другой моделью $ events.

Я запрашиваю базу данных для клубов, используя это

$clubs = Club::get()->where('city', $city);

Затем для событий я пытаюсьскопируйте все события, связанные со ВСЕМИ клубами, выполнив

foreach ($clubs as $club) 
                {

                $events = Event::where('club_id', $club->id)->get()->sortBy('date');

                }

Проблема в том, что когда я отражаю события, я вижу события только для одного клуба, а не для всех клубов, это почти как мой циклитерация.

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Для лучшей практики и производительности используйте отношения Laravel.

В вашей модели клуба есть hasMany функция, подобная этой:

public function events()
{
   return $this->hasMany(App\Models\Event::class);
}

Тогда ваш контроллер ..

$clubs = Club::where('city', $city)
  ->with(['events' => function($query) {
     $query->sortBy('date');
  }])
  ->get();

После этого у вас будут события в ваших коллекциях $ club

Если вы хотите только события, вы можете получить это

$events = $clubs->pluck('events');
1 голос
/ 11 октября 2019

Вы можете получить результат, сделав это. Вам не нужна петля.

$clubs = Club::where('city', $city)->get();
$club_ids = $clubs->pluck("id")->toArray();
$events = Event::wherein('club_id',$club_ids)->sortBy('date')->get();
0 голосов
/ 11 октября 2019

@ Мехран дал лучший ответ, но просто чтобы решить вашу проблему, проверьте его:

Если вы печатаете $events после цикла, вы перезаписываете переменную $events и видите только последнийзначение итерации.

Преобразование $events в array и присвоение значений в разных ключах, после цикла вы увидите все события.

$events = [];
foreach ($clubs as $club) {
    $events[] = Event::where('club_id', $club->id)->get()->sortBy('date');
}
dd($events);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...