如何在laravel 5.4中使用分页和laravel eloquent find方法

时间:2017-02-17 08:40:37

标签: php laravel pagination 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 Relationship,因此特定标签下有很多帖子,我的目的是在帖子的特定标签下按迭代顺序迭代所有帖子,并在该页面中实现分页。

以下是showtags视图的代码

<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>

如果有人知道该怎么做,请回复。提前谢谢。

2 个答案:

答案 0 :(得分:2)

我通过一个简单的技巧解决了这个问题。我的目标是在同一个标​​签下对所有帖子进行分页,就像你们在StackOverflow中看到的一样。

修改后的控制器功能

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函数,我之前用它来按降序排序。

现在在视图中而不是使用传统方法{!! $tag->links() !!}来建立分页链接

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

答案 1 :(得分:0)

使用此行$tag = Tag::find($id)->paginate(5);您应该只获得一个标记(如果您的id不存在的标记,则为null),之后您需要对其进行分页。如果您想要分页,您的代码会获得所有代码,然后将其分页Tag::paginate(5)