Laravel Eloquent关系数据的分页

7
我将尝试对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是否不支持返回关联关系的分页结果?

你可以改变你试图解决的问题。你可以有三个模型对象:产品(1),产品选项实例(2),产品选项(3)。你可以让(2)与(1)和(3)建立一对一的关系。有了这个想法,你就可以在(2)上进行分页。据我所知,这可以解决你的问题。你仍然可以轻松地获取一个产品的所有选项和一个选项的所有产品。你可以使用Eloquent的作用域功能,例如。至于最初的问题,我不知道如何让Eloquent在关系中进行分页。 - Pedro Henrique A. Oliveira
展示你的全部代码和堆栈跟踪。分页功能正常,看起来你只是在尝试做你应该做的事情。 - Jarek Tkaczyk
3个回答

17

你不能像那样懒加载关系分页,而是在你的Product模型中,在你的选项有许多关系下面放置以下函数

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

这将允许您对关系型数据进行分页调用

$product->options_paginated

@41eight. 如何对ProductOption数据进行分页。 - scott

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

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

尝试添加get


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接