首页 > 解决方案 > 带有条件的laravel分页

问题描述

我有分页问题,​​到目前为止,我查看了文档,但在那里找不到。我还查看了有关堆栈溢出的其他帖子,但在这种情况下,它们不具备我的条件。那么我如何对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"

标签: laravellaravel-5.8

解决方案


您可以使用该whereHas()方法添加关系条件(文档)。

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为您的正确需求。


推荐阅读