我有一個使用 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 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消