简体   繁体   中英

Laravel Eloquent pagination on relationships

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?

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

$product->options_paginated

Create a custom length-aware paginator.

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

尝试添加get

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