我有一个使用 Laravel 7(最新版本)和 PHP 7.4.4(最新版本)的运行代码,但我想问是否有更好的实现方法。所以基本上,问题出在嵌套的 for 循环内部。我想控制控制器中的变量“学期”和“科目”并将它们传递到视图(index.blade.php)。然而,“科目”取决于“学期”,因此,我被强行写下了刀片模板内的逻辑,例如: $subjects = $semester->subjects()->where(SOME QUERY HERE)->get()请参阅下面的代码片段:索引.blade.php@foreach($semesters as $semester) @if($subjects = $semester->subjects()->where(SOME QUERY HERE)->get()) @if($subjects->isNotEmpty()) //SOME CODE HERE @foreach($subjects as $subject) //SOME CODE HERE @endforeach @endif @endif@foreach有没有最好的方法来实现这个?提前致谢。编辑我也担心查询,因为它在循环内。但是,我将更改设计规范以限制视图中显示的“学期”数量。这也是为了限制循环内的查询。但是,如果您有更好的实现,请提出建议。非常感谢。
1 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
我认为你想要的是在各自的学期中急切地加载一些特定的科目。
$semesters = Semester::with([
'subjects' => function ($query) {
$query->where() // SOME QUERY HERE.
},
])
->get();
现在,当您调用它时,$semester->subjects它仅返回那些过滤的主题。
示例代码
@foreach($semesters as $semester)
@if($semester->subjects->isNotEmpty())
//SOME CODE HERE
@foreach($semester->subjects as $subject)
//SOME CODE HERE
@endforeach
@endif
@foreach
编辑
现在您不必担心循环查询。如您所见,我们已经完成加载。这就是所谓的急切加载
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报
0/150
提交
取消