有没有更好的方法将嵌套 for 循环内的变量从控制器传递到视图?

我有一个使用 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

有没有最好的方法来实现这个?提前致谢。


编辑


我也担心查询,因为它在循环内。但是,我将更改设计规范以限制视图中显示的“学期”数量。这也是为了限制循环内的查询。但是,如果您有更好的实现,请提出建议。非常感谢。


守着星空守着你
浏览 46回答 1
1回答

胡说叔叔

我认为你想要的是在各自的学期中急切地加载一些特定的科目。$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编辑现在您不必担心循环查询。如您所见,我们已经完成加载。这就是所谓的急切加载
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5