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 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法