skip to Main Content

So my front-end Lists of Businesses are not in paginated style. But I do not know how to do it. Can anyone please help? The code I posted is in my BusinessListController.php

BusinessListController.php

`<?php

namespace AppHttpControllers;

use AppModelsBusiness;
use AppModelsCategory;
use AppModelsLocation;
use IlluminateHttpRequest;

class BusinessListController extends Controller
{
    public function index(Request $request)
    {
        $businesses = Business::query()
            ->with('location')
            ->whereFilters($request->only(
                ['search', 'category', 'location']
            ))
           ->get();d

        return view('pages.business-list', [
            'businesses' => $businesses,
            'locations' => Location::all(),
            'categories' => Category::all()
        ]);
    }
}`

And then here is the code for my view blade front-end
Business-List.blade.php

<div class="row business-list-row mx-auto">
            @foreach ($businesses as $business)
                <div class="col-md-4">
                    <div class="card shadow border-light mb-3">
                        <img
                            src="https://cdn1.clickthecity.com/images/articles/content/5d6eba1f4795e0.58378778.jpg"
                            class="card-img-top" alt="...">
                        <div class="card-body">
                            <div class="d-flex justify-content-between">
                                <div>
                                    <h4 class="card-title h6" style="font-weight: bold;">
                                        {{Str::limit($business->name, 20, $end='...')}}
                                    </h4>
                                    <div class="">     
                                        <p class="card-text">
                                            {{ $business->location?->name }}
                                        </p>                                                                             
                                        <p class="card-text" style="color: #32a852;">
                                            {{ $business->category?->name}}
                                        </p>                                     
                                    </div>
                                </div>
                                <div class="align-self-center">
                                    <a href="{{ route('store', $business->id) }}" class="btn btn-info stretched-link">
                                        Visit
                                    </a>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            @endforeach
        </div>

2

Answers


  1. So you need to do three things.

    1. In Controller:

      $businesses = Business::query()
           ->with('location')
           ->whereFilters($request->only(
               ['search', 'category', 'location']
           ))
          ->paginate(15);
      

    put the number of items you need on a single page. here I put 15.

    1. Put this under the </div> of your list.

      {{ $business->links() }}
      
    2. Put this inside the AppProvidersAppServiceProvider boot method.

       use IlluminatePaginationPaginator;
      
       public function boot()
       {
         Paginator::useBootstrapFive(); // or
         Paginator::useBootstrapFour();
       }
      

    This depends upon which version of Bootstrap you are using.

    Still confused? Checkout Laravel Pagination Documentation

    Login or Signup to reply.
  2. Just remove ->get();d and add paginate

    example

    ModelName()->paginate();
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search