有条件的laravel分页

时间:2019-03-26 13:26:03

标签: laravel laravel-5.8

我在分页方面遇到问题,到目前为止,我看着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"

1 个答案:

答案 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方法将第三行更改为正确的需求。