Reputation: 492
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
Upvotes: 3
Views: 1917
Reputation: 163748
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);
Upvotes: 3
Reputation: 401
make use of the simplePaginate function instead
$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();
Upvotes: 0
Reputation: 38584
Use
{{ $category->links() }}
$category
should be your variable name which you're passing to blade.
Example
If you're passing data like this return view('viewName', ['names' => $names]);
then you have to use {{ $names->links() }}
Read this Laravel documentation
Upvotes: 0