Laravel 分页:为什么有些页面返回未定义的偏移量:0?
Laravel pagination: why are some pages returning undefined offset: 0?
所以我有一个包含大约 1700 条记录的列表,我想将其显示为每页 5 条记录的分页,并且在大多数情况下,这是使用我当前拥有的代码。我遇到的问题是,当我转到某些页面时出现此错误:Undefined offset: 0 (View: Project\resources\views\minors\index.blade.php)
。当我 var_dump
发送到视图的数据时,它包含一个索引为 0 的项目。
控制器方法:
public function index( Request $request )
{
$locations = Location::all();
$minors = Module::paginate(5);
return view('minors.index')->with(compact('minors','locations'));
}
查看:
@if(isset($minors))
@foreach($minors as $key => $minor)
<a id="minorLinkId" class="minorLink" href="{{ Action('MinorController@show', $minor->id) }}">
<div id="minorContainerId" class="minorContainer">
<div class="textContainer">
<h3>{{$minor->name}}</h3>
<p>{{@strip_tags($minor->subject)}}</p>
</div>
<div class="imageContainer">
<img src="{{asset('img/person-placeholder.jpg')}}">
<ul>
<li>ECTs: {{$minor->ects}}</li>
<li>Taal: {{$minor->language}}</li>
<li>Niveau: {{$minor->level}}</li>
<li>{{$minor->locations[0]->Name }}</li>
</ul>
</div>
</div>
</a>
@endforeach
{{ $minors->links() }}
@endif
控制器索引方法中var_dump($minors)
的第一部分放在return view('minors.index')
之前:
object(Illuminate\Pagination\LengthAwarePaginator)#486 (11) { ["total":protected]=> int(1710) ["lastPage":protected]=> int(342) ["items":protected]=> object(Illuminate\Database\Eloquent\Collection)#479 (1) { ["items":protected]=> array(5) { [0]=> object(App\Module)#478 (26) { ["guarded":protected]=> array(0) { } ["connection":protected]=> string(5) "mysql" ["table":protected]=> string(7) "modules" ["primaryKey":protected]=> string(2) "id" ["keyType":protected]=> string(3) "int" ["incrementing"]=> bool(true) ["with":protected]=> array(0) { } ["withCount":protected]=> array(0) { } ["perPage":protected]=> int(15) ["exists"]=> bool(true) ["wasRecentlyCreated"]=> bool(false) ["attributes":protected]=> array(33) {
我怀疑问题与控制器索引方法中的return语句有关,但我不明白为什么它只发生在某些页面上。
感谢您的帮助。
错误是因为这一行
<li>{{$minor->locations[0]->Name }}</li>
您正在尝试访问不存在的索引零,因为位置数组为空或未定义。您可以将上面的代码替换为以下代码:
@if(sizeof($minor->locations) > 0)
<li>{{$minor->locations[0]->Name }}</li>
@endif
sizeof() 函数对数组中的元素或对象中的属性进行计数。它returns数组中元素的数量。
所以我有一个包含大约 1700 条记录的列表,我想将其显示为每页 5 条记录的分页,并且在大多数情况下,这是使用我当前拥有的代码。我遇到的问题是,当我转到某些页面时出现此错误:Undefined offset: 0 (View: Project\resources\views\minors\index.blade.php)
。当我 var_dump
发送到视图的数据时,它包含一个索引为 0 的项目。
控制器方法:
public function index( Request $request )
{
$locations = Location::all();
$minors = Module::paginate(5);
return view('minors.index')->with(compact('minors','locations'));
}
查看:
@if(isset($minors))
@foreach($minors as $key => $minor)
<a id="minorLinkId" class="minorLink" href="{{ Action('MinorController@show', $minor->id) }}">
<div id="minorContainerId" class="minorContainer">
<div class="textContainer">
<h3>{{$minor->name}}</h3>
<p>{{@strip_tags($minor->subject)}}</p>
</div>
<div class="imageContainer">
<img src="{{asset('img/person-placeholder.jpg')}}">
<ul>
<li>ECTs: {{$minor->ects}}</li>
<li>Taal: {{$minor->language}}</li>
<li>Niveau: {{$minor->level}}</li>
<li>{{$minor->locations[0]->Name }}</li>
</ul>
</div>
</div>
</a>
@endforeach
{{ $minors->links() }}
@endif
控制器索引方法中var_dump($minors)
的第一部分放在return view('minors.index')
之前:
object(Illuminate\Pagination\LengthAwarePaginator)#486 (11) { ["total":protected]=> int(1710) ["lastPage":protected]=> int(342) ["items":protected]=> object(Illuminate\Database\Eloquent\Collection)#479 (1) { ["items":protected]=> array(5) { [0]=> object(App\Module)#478 (26) { ["guarded":protected]=> array(0) { } ["connection":protected]=> string(5) "mysql" ["table":protected]=> string(7) "modules" ["primaryKey":protected]=> string(2) "id" ["keyType":protected]=> string(3) "int" ["incrementing"]=> bool(true) ["with":protected]=> array(0) { } ["withCount":protected]=> array(0) { } ["perPage":protected]=> int(15) ["exists"]=> bool(true) ["wasRecentlyCreated"]=> bool(false) ["attributes":protected]=> array(33) {
我怀疑问题与控制器索引方法中的return语句有关,但我不明白为什么它只发生在某些页面上。
感谢您的帮助。
错误是因为这一行
<li>{{$minor->locations[0]->Name }}</li>
您正在尝试访问不存在的索引零,因为位置数组为空或未定义。您可以将上面的代码替换为以下代码:
@if(sizeof($minor->locations) > 0)
<li>{{$minor->locations[0]->Name }}</li>
@endif
sizeof() 函数对数组中的元素或对象中的属性进行计数。它returns数组中元素的数量。