在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中通过子查询进行分页的主要内容,如果未能解决你的问题,请参考以下文章