首页 > 解决方案 > Laravel 在最后一个元素的 foreach 循环外打印集合返回未定义的变量

问题描述

我有一个集合,如果在 foreach 循环中打印,则返回整个集合直到结束:

@foreach($questions as $q)



@endforeach

<a href="{{url('basic-test/'. $q->id) }}" class="btn btn-info">Next</a> //undefined variable on the last item

但是,如果我在检索最后一条记录之前将其置于 for 循环之外,则会出现未定义的变量错误。我的控制器:

public function getQuestion(Request$request, $id)
{

$first = Question::findOrFail($id);
$request->session()->push('question', $id);
$questions = Question::whereNotIn('id', session('question'))->inRandomOrder()->get();

return view('basicTest') ->with(compact( 'questions', 'first'));
}

标签: phplaravelforeachcollections

解决方案


您可以使用Laravel collection助手来获取last收藏品。

@foreach($questions as $q)

<a href="{{url('basic-test/'. $q->id) }}" class="btn btn-info">Next</a>

@endforeach

<a href="{{url('basic-test/'. $questions->last()->id) }}" class="btn btn-info">Next</a>

您的查询有一个错误删除find()并将其更改为,因为调用find()将返回 1 个项目而不是集合:

$questions = Question::whereNotIn('id', session('question'))->inRandomOrder()->get();

此外,因为您没有运行任何程序wherefirstOrFail您可以将其缩短为:

$first = Question::findOrFail($id);

推荐阅读