Laravel Eloquent对人际关系的分页

时间:2014-08-26 03:32:45

标签: php laravel eloquent

我正试图像这样对一个雄辩的关系进行分页:

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

但是我收到以下错误:

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

我已确认代码$query = Product::find(1)->options()会返回一组选项。 $query对象似乎是hasMany类型。以下是我正在使用的模型类。

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');
    }
}

eloquent不会返回关系的分页结果吗?

3 个答案:

答案 0 :(得分:15)

你不能像那样延迟加载关系分页,而是在你的产品模型中把下面的函数放在你的选项下面有很多关系

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

这将允许您通过

调用关系数据的分页
$product->options_paginated

答案 1 :(得分:0)

创建自定义长度感知分页器。

$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
            ]);

答案 2 :(得分:-3)

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

尝试添加get