为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2024-01-03 14:41:50
我有一个使用 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

编辑


现在您不必担心循环查询。如您所见,我们已经完成加载。这就是所谓的急切加载


查看完整回答
反对 回复 2024-01-03
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信