duanjing7651 2017-12-28 17:56 采纳率: 0%
浏览 180
已采纳

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

The following code will output the 3 first webshops correctly:

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);
}

Blade template:

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

But when I insert the pagination code in my blade template:

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

I get the following error:

Method links does not exist.

I'm following the documentation from here: https://laravel.com/docs/5.4/pagination

  • 写回答

3条回答 默认 最新

  • dongyu3967 2017-12-28 18:53
    关注

    You can create paginator manually, but if you want to keep code maintainable, just use two collections:

    $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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行