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 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout