在laravel中通过子查询进行分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在laravel中通过子查询进行分页相关的知识,希望对你有一定的参考价值。

以下代码将正确输出3个第一个网上商店:

public function category($slug) {
    $category = Category::select()
        ->where('slug', $slug)
        ->with(['webshops' => function ($query) {
            $query->groupBy('webshops.id')
                ->where('active', 1)
                ->orderBy('webshops.name')
                ->with(['brands' => function ($query) {
                    $query->where('active', 1)
                        ->where('replace_by', NULL)
                        ->orderBy('name');
                }])
                ->paginate(3);
        }])
        ->first();

    if(!$category)
        abort(404);

    $data['title'] = "Tøjbutikker der forhandler ". $category->name;

    $data['category'] = $category;
    $data['webshops'] = $category->webshops;
    return view('pages/category', $data);
}

刀片模板:

                <ul class="webshop-list">
                    @foreach($webshops as $webshop)
                        <li>
                            {{ $webshop->name }}
                        </li>
                   @endforeach
                </ul>
                {{ $webshops->links() }}

但是当我在我的刀片模板中插入分页代码时:

{{ $category->webshops->links() }}

我收到以下错误:

Method links does not exist.

我正在关注这里的文档:https://laravel.com/docs/5.4/pagination

答案

您可以创建paginator manually,但如果您想保持代码可维护,只需使用两个集合:

$category = Category::where('slug', $slug)->first();
$shops = Webshop::whereHas('categories', function($q) use($category) {
                 $q->where('id', $category->id);
             })
             ->groupBy('id')
             ->orderBy('name')
             ->with(['brands' => function ($query) {
                 $query->where('active', 1)
                       ->where('replace_by', null)
                       ->orderBy('name');
             }])
             ->paginate(3);
另一答案

使用

{{ $category->links() }}

$category应该是你传给刀片的变量名。


如果你传递像return view('viewName', ['names' => $names]);这样的数据,那么你必须使用{{ $names->links() }}


Read this Laravel documentation

另一答案

而是使用simplePaginate函数

$category = Category::select()
->where('slug', $slug)
->with(['webshops' => function ($query) {
    $query->groupBy('webshops.id')
    ->orderBy('webshops.name')
    ->with(['brands' => function ($query) {
        $query->where('active', 1)
        ->where('replace_by', NULL)
        ->orderBy('name');
    }])
    ->simplePaginate(3);
}])
->first();

以上是关于在laravel中通过子查询进行分页的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 分页 数据丢失问题解决

Laravel - 分页和获取()

如何在Mysql查询中通过PHP对加密数据进行排序

如何使用 Laravel 和 jQuery 对查询结果进行分页

带有雄辩查询的 Laravel 分页

[ Laravel 5.5 文档 ] 数据库操作 —— 在 Laravel 中轻松实现分页功能