Laravel控制器中的foreach

Laravel foreach in Controller

我的控制器中的 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

因此,$appointments 有一个元素(第一个日志),但我无法在其上循环。 在视图文件中我使用

@foreach($appointments as $appointment)

在网格中显示我的结果,它工作正常。

您实际上并没有从查询中获取数据。

这部分创建一个查询生成器对象并使用查询准备它:

$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');
}