2
votes

I'm sorry, I have a problem with my laravel pagination Gives me one by one page for example, in my table 16 row I make paginate (10), the pagination gives me in the first page from 1 to 10 and in the second page from 1 to 6 I want the normal pagination from 1 to 10 and from 11 to 16 any help, please

 public function allappointmnts(){


  $allapo=DB::table('bookappoitments')->orderBy('times.id')
  ->join('users','bookappoitments.users_id','users.id')
  ->join('times','bookappoitments.times_id','times.id')
  ->join('dates','bookappoitments.Dates_id','dates.id')
  ->paginate(10);

   return view('admin.Managers.allappoinments',compact('allapo'));

}

in the blade page:

  <div class="text-center">
    {!! $allapo->links(); !!}
  </div>

The table :

 <table class="table table-bordered table-hover table-striped">
                                        <thead>
                                            <tr>
                                                <th>#</th>
                                                <th>Date</th>
                                                <th>Time</th>
                                                <th>Employee</th>
                                                <th>Name</th>
                                                <th>Email</th>
                                                <th>Company</th>
                                                <th>Phone</th>
                                                <th>Location</th>
                                                <th>Remarks</th>
                                                <th style="text-align: center;">Action</th>


                                            </tr>
                                        </thead>
                                        <tbody>
                                            <tr>

                                                @foreach($allapo as $Appointments)

                                                <td>{{ $loop->index+1 }}</td> 
                                                <td>{{ $Appointments->Dates }}</td>
                                                <td>{{ $Appointments->from_to }}</td>
                                                <td>{{ $Appointments->name }}</td>
                                                <td>{{ $Appointments->gustname }}</td>
                                                <td>{{ $Appointments->gustemail }}</td>
                              <td>{{ $Appointments->gustcompany }}</td>
                              <td>{{ $Appointments->gustphone }}</td>
                                                <td>{{ $Appointments->Location }}</td>
                                                <td>{{ $Appointments->Remarks }}</td>

                              <td>
                                 <a class="btn btn-success btn-mini deleteRecord " href="{{url('showbymanagment',$Appointments->id)}}">Show</a>

                     </td> 


                                                </tr>

                                                @endforeach
5
Are you sure that the second page doesn't actually load the 11-16 elements..? There's nothing here to state otherwise.Qirel
Yes I'm sure I can't imagine :)Hima Hima
Can you show some screenshots of that?Qirel
ok just secoundHima Hima

5 Answers

2
votes

Your problem is that you're using the current index of each loop - which will always be within the range of 1-10 of each page (since you have 10 elements per page).

You need to get the current page you're on using

$allapo->currentPage()

Then get the number of elements per page you got, using

$allapo->perPage()

Multiply these two, and it will be the base number for your pagination, meaning that its this number you should increment from.

The indexed table should then be

{{ $allapo->currentPage() * $allapo->perPage() + $loop->index }}

instead of

{{ $loop->index+1 }}

Then, to fix the heading-numbers (10 and 6 at the top), get the total number of results instead of the count of the page using

$allapo->total()

See the Laravel documentation for more details.

1
votes

Not entirely sure, but you will need to write some sort of function to fix this.

Essentially you need to do this:

  1. Get the page number (ex: 1)
  2. Multiply it by the rows per page (ex: 10)
  3. Add the iteration number
  4. Subtract the per page number

function correct_pagination_numbers($cp, $pp, $counter)
{
    $c = (($pp * $cp) + $counter) - $pp;
    return $c;
}

Then you can call the function in your view like so:

<td>{{ correct_pagination_numbers($allapo->currentPage(), $allapo->perPage(), $loop->index) }}</td> 

It would probably be the best solution to do this in a helper file. If you don't know how to create a helper file and autoload it, you can look here.

1
votes

Try this code:

<?php $i = $lists->perPage() * ($lists->currentPage() - 1); ?>
   <table class="table table-bordered table-hover table-striped">
      <thead>
         <tr>
          <th>#</th>
          <th>Date</th>
          <th>Time</th>
          <th>Employee</th>
          <th>Name</th>
          <th>Email</th>
          <th>Company</th>
          <th>Phone</th>
          <th>Location</th>
          <th>Remarks</th>
          <th style="text-align: center;">Action</th>


          </tr>
        </thead>
       <tbody>
        <tr>
@foreach($allapo as $Appointments)
  <td><?php $i++; ?>{{ $i }} </td> 
  <td>{{ $Appointments->Dates }}</td>
  <td>{{ $Appointments->from_to }}</td>
  <td>{{ $Appointments->name }}</td>
  <td>{{ $Appointments->gustname }}</td>
  <td>{{ $Appointments->gustemail }}</td>
  <td>{{ $Appointments->gustcompany }}</td>
  <td>{{ $Appointments->gustphone }}</td>
  <td>{{ $Appointments->Location }}</td>
  <td>{{ $Appointments->Remarks }}</td>
  <td><a class="btn btn-success btn-mini deleteRecord " href=" 
{{url('showbymanagment',$Appointments->id)}}">Show</a></td> 
</tr>
@endforeach
0
votes

Try ths
@foreach($allapo as $key => $Appointments)

{{ $key + $allapo->firstItem() }}

@endforeach

-3
votes

to see the correct number change the line

<td>{{ $loop->index+1 }}</td> 

to:

 <td>{{ ($allapo->currentPage() - 1) * $allapo->perPage() + $loop->iteration }} <td>