简体   繁体   中英

Laravel Custom Pagination

Having problems getting my pagination to work in Laravel 5.2 I use a foreach to generate a list of objects where each object has a certain ranking. (competition)

The first query I used was this one:

$goedeDoelen = GoedDoel::orderBy('punten', 'desc')->simplePaginate(5);

This worked pretty ok, only problem was that my ranking would reset everything I would go to a different page.

Example: Page 1 has objects from rank 1 - 5, page 2 should have ranks 6-10. By using the first Paginate method, the second page would have objects starting from 1 again.

I have tried to work around this by adding the ranking as an extra attribute to my Eloquent collections.

    $ranking = GoedDoel::orderBy('punten', 'desc')->get();
    foreach($ranking as $key => $item) {
        $item->ranking = $key+1;
    }

After that I tried to use ->simplePaginate() on my updated collection. This gave an error.

I have created a custom Paginator.

$goedeDoelen = new Paginator($ranking, 5);

This isn't working as intended. When I go to my second page, the URL messes up and goes to another view.

How can I make sure the Paginator knows what my current URL is to which it has to apply the ?page=2

You need to use the paginate() method.

$goedeDoelen = GoedDoel::orderBy('punten', 'desc')->paginate(5);

{!! $goedeDoelen->links() !!}

The following Code illustrates manual pagination in Laravel

Sample Controller

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator as Paginator;

use App\Models\UserRechargeDetails;

class PaginateController extends Controller
{
    //
    public function index(Request $request)
    {

        $user_1 = new UserRechargeDetails;


        // Get records from Database
        $items = $user_1->all();

        // Store records in an array
        $records = [];

        $i = 0;
        foreach($items as $item)
        {
            $records[$i][0] = $item->user_name;
            $records[$i][1] = $item->rech_mobile;
            $i++;
        }

        // Current page for pagination
        $page = $request->page; 

        // Manually slice array of product to display on page
        $perPage = 2;
        $offset = ($page-1) * $perPage;
        $data = array_slice($records, $offset, $perPage);

        // Your pagination 
        $final_data = new Paginator($data, count($records), $perPage, $page, ['path'  => $request->url(),'query' => $request->query(),]);

        /*
            For Display links, you may add it in view page
            {{ $data->links('pagination::bootstrap-4') }}
        */


        return view('admin.pagination_new', ['data' => $final_data, 'j' => 1]);

    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM