Laravel分页:为什么有些页面返回未定义的偏移量:0?

时间:2019-04-06 18:39:55

标签: php laravel pagination laravel-blade undefined-index

因此,我有一个大约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) {

我怀疑问题与控制器的index方法中的return语句有关,但我不明白为什么它仅在某些页面上发生。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

错误是因为此行

<li>{{$minor->locations[0]->Name }}</li>

由于位置数组为空或未定义,您正在尝试访问不存在的索引零。您可以将上面的代码替换为以下代码:

@if(sizeof($minor->locations) > 0)
    <li>{{$minor->locations[0]->Name }}</li>
@endif

sizeof()函数对数组中的元素或对象中的属性进行计数。它返回数组中元素的数量。