Laravel foreach в контроллере - PullRequest
       5

Laravel foreach в контроллере

0 голосов
/ 23 ноября 2018

У меня проблема с циклом foraech в контроллере.
Это мой код:

$appointments = Appointment::with('user')
    ->with('service')
    ->whereDate('scheduled_on', '>=', Carbon::today()->toDateString())
    ->orderBy('scheduled_on', 'asc');

Debugbar::info('$appointments count()='.$appointments->count());
if($appointments->count()) {
    Debugbar::info('pos 1');
    foreach ($appointments as $appointment) {
        Debugbar::info('pos 2'); //not printed
    }
}

return view('admin.appointments.index', ['appointments' => $appointments->paginate()]);

И вот что я вижу на своей панели отладки:

$appointments count()=1
pos 1

Итак, $ назначений имеет один элемент (первый журнал), но я не могу зациклить его.В файле View я использую

@foreach($appointments as $appointment)

, чтобы показать мой результат в сетке, и он отлично работает.

1 Ответ

0 голосов
/ 23 ноября 2018

Вы на самом деле не получаете данные из запроса.

Эта часть создает объект построителя запросов и подготавливает его с помощью запроса:

$appointments = Appointment::with('user')
    ->with('service')
    ->whereDate('scheduled_on', '>=', Carbon::today()->toDateString())
    ->orderBy('scheduled_on', 'asc'); 

Затем вы делаете $appointments->count(), который выполнит запрос:

select COUNT(*) from `appointements` where date(`scheduled_on`) >= ? order by `scheduled_on` asc

Это даст вам правильное количество результатов, но не фактические результаты.

Когда вы переходите к представлению, вы фактически выполняете $appointments->paginate(), который выполняет , выполняет запрос.Однако, когда вы пытаетесь перебрать объект построителя запросов.Эта итерация не имеет никакого смысла и, вероятно, ничего не происходит.

Если вы хотите перебрать данные в контроллере, вы можете сделать:

foreach ($appointments->get() as $appointment) {
    Debugbar::info('pos 2');
}
...