Home » Php » php – Laravel Eloquent pagination on relationships

php – Laravel Eloquent pagination on relationships

Posted by: admin July 12, 2020 Leave a comment


I am trying to paginate a Eloquent relationship like this:

 $query = Product::find(1)->options()->paginate();

But I get the following error:

Fatal error: Call to a member function getCurrentPage() on a non-object

I have confirmed that the code $query = Product::find(1)->options() returns a collection of options. The $query object seems to be of type hasMany. Below are the model classes I am using.

class Product extends Eloquent

    protected $table = 'products';

    public function options ()
        return $this->hasMany('ProductOption', 'product_id');

class ProductOption extends Eloquent
    protected $table = 'product_options';

    public function product()
        return $this->belongsTo('Product', 'product_id');

Does eloquent not return paginated results for relationships?

How to&Answers:

You can not lazy load relational pagination like that, instead in your Product Model put the following function below your options has many relationship

public function getOptionsPaginatedAttribute()
    return $this->options()->paginate(10);

This will allow you to call the pagination on your relational data by



Create a custom length-aware paginator.

$options = new LengthAwarePaginator(Product::find(1)->options()->
            ->skip(($request->input('page', 1) - 1) * 10)->take(10)->get(),
            10, $request->input('page', 1),
                // paginator options here


$query = Product::find(1)->get()->options()->paginate(); 

Try adding get