iam_ryu's avatar

Use pagination with lazy eager loading (load() method)

Hello Guys.

I want to use paginate with lazy eager loading (load() method). Here my code:

TelemarketerController.php

public function index(Center $center)
{
    $center->load(['telemarketers' => function ($query) {
        return $query->paginate();
    }]);
    
    return view('centers.telemarketers.index', compact('center'));
}       

telemarketers/index.php

@if ($center->telemarketers->hasPages()))
<tfoot>
<tr>
 <td colspan="6">{{ $center->telemarketers->links() }}</td>
</tr>
</tfoot>
@endif

Error:

Method Illuminate\Database\Eloquent\Collection::hasPages does not exist. (View: E:\Sites\app\resources\views\centers\telemarketers\index.blade.php)

How can i fix it?

0 likes
4 replies
Cronix's avatar

I'm assuming telemarketers is a collection of many results, and not a single object. You probably have to loop over them to be able to use whatever your hasPages() method is on each individual result instead of the whole array (collection)?

iam_ryu's avatar

I just want to paginate lazy eager loaded telemarketers.

Snapey's avatar
Snapey
Best Answer
Level 122

You cannot paginate a nested relation.

You should get telemarketers for centre as their own collection

$telemarketers = $centre->telemarketers()->paginate();

return view('centers.telemarketers.index', compact(['center','telemarketers']));
4 likes

Please or to participate in this conversation.