如何将分页与 laravel eloquent 中的查找方法一起使用 laravel 5.4

How to use pagination along with laravel eloquent find method in laravel 5.4

我正在尝试在 laravel 中实现分页并出现以下错误

Undefined property: Illuminate\Pagination\LengthAwarePaginator::$name

这是我的控制器函数

public function showTags($id)
{
    $tag = Tag::find($id)->paginate(5);

    // when lazy loading
    $tag->load(['posts' => function ($q) {
        $q->orderBy('id', 'desc');
    }]);

    return view('blog.showtags')->withTag($tag);
}

这是标签模型

class Tag extends Model
{
    public function posts() 
    {
        return $this->belongsToMany('App\Post');
    }
}

Tag 和 Post 模型有 belongsToMany 关系,所以特定标签下有很多 post,我的目标是将特定标签下的所有 post 降序迭代post 并在该页面中实现分页。

这是展示标签视图的代码

<table class="table">
    <thead>
    <tr>
        <th>#</th>
        <th>Title</th>
        <th>Tags</th>
    </tr>
    </thead>
    <tbody>
    <?php $count = 1; ?>
    @foreach($tag->posts as $post)
        <tr>
            <th>{{ $count++ }}</th>
            <th>{{ $post->title }}</th>
            <th>@foreach($post->tags as $tag)
                    <span class="label label-default">{{ $tag->name }}</span>
                @endforeach
            </th>
        </tr>
    @endforeach
    </tbody>
</table>

//Here is the code i used for pagination in view
<div class="text-center">
    {!! $tag->posts->links() !!}
</div>

如果有人知道如何执行此操作,请回复。提前致谢。

使用这一行 $tag = Tag::find($id)->paginate(5); 你应该只得到一个标签(如果你的 id 标签不存在,则为 null),然后你想对其进行分页。如果你想对你的标签进行分页,获取所有标签,然后对其进行分页 Tag::paginate(5)

我用一个简单的技巧解决了这个问题。我的目标是在相同的标签下对所有 post 进行分页,就像你们在 Whosebug 中看到的那样。

修改后的控制器函数为

public function showTags($id)
{
    $tag = Tag::find($id);
    
    // when lazy loading
    $tag->load(['posts' => function ($q) {
        $q->orderBy('id', 'desc')->paginate(10);
    }]);
    
    return view('blog.showtags')->withTag($tag);
}

正如你们所看到的,我将 paginate() 函数从 find 移动到 load 函数,我之前使用该函数按降序对 post 进行排序。

现在考虑使用传统方法 {!! $tag->links() !!} 制作 link 分页

我用{!! $tag->paginate(10) !!}