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

问题描述 投票:2回答:3

以下代码将正确输出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

php mysql laravel pagination laravel-5.4
3个回答
2
投票

您可以创建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);

0
投票

使用

{{ $category->links() }}

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


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


Read this Laravel documentation


0
投票

而是使用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();
© www.soinside.com 2019 - 2024. All rights reserved.