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
This will allow you to call the pagination on your relational data by
Create a custom length-aware paginator.
Try adding get