laravel 有条件的分页

Pagination in laravel with conditions

我的分页有问题,到目前为止我查看了 docs 但我无法在其中找到。我还查看了有关堆栈溢出的其他 post,但它们不具备我在这种情况下的条件。那么我该如何对 if 语句进行分页,因为我得到了错误

Undefined property: 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); 进行分页呢?

生成 link 的 blade 如果单击 link,控制器从中获取 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"

可以使用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 方法将第三行更改为您的正确需要。