我在分页方面遇到问题,到目前为止,我看着docs,但在那里找不到。我还查看了有关堆栈溢出的其他文章,但在这种情况下它们没有我的条件。因此,由于出现错误,我该如何对if
语句进行分页
未定义的属性:Illuminate \ Pagination \ LengthAwarePaginator :: $ threads
因为分页时需要像这样model::paginate()
那样直接将其从模型中取出,所以在这种情况下该怎么做?
控制器
public function index(Request $request)
{
if($request->has('tags')){
$tag = Tag::find($request->tags)->paginate(10);
$threads = $tag->threads;
} else {
$threads = Thread::paginate(10);
}
return view('thread.index', compact('threads'));
}
那么如何正确$tag = Tag::find($request->tags)->paginate(10);
进行分页?
生成链接的刀片,如果单击该链接,控制器将从中获取tag
<div class="col-md-3">
<h4>Tags</h4>
<ul class="list-group">
<a href="{{route('thread.index')}}" class="list-group-item">
<span class="badge">14</span>
All Threads
</a>
@foreach($tags as $tag)
<a href="{{route('thread.index',['tags' => $tag->id])}}" class="list-group-item">
<span class="badge">14</span>
{{$tag->name}}
</a>
@endforeach
</ul>
更新
控制器中的 var_dump($request->tags);
会掉落string(1) "2"
答案 0 :(得分:3)
您可以使用whereHas()
方法添加关系条件(docs)。
if ($request->has('tags')){
$threads = Thread::whereHas('tags', function ($query) use ($request) {
$query->whereIn('tags.id', $request->tags);
})->paginate(10);
} else {
$threads = Thread::paginate(10);
}
在此示例中,您需要使用whereIn
方法将第三行更改为正确的需求。