我正试图在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>
如果有人知道该怎么做,请回复。提前谢谢。
答案 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)