将laravel 5.2中的合并查询构建器合并到随后的分页

时间:2016-08-15 07:00:44

标签: php laravel laravel-5 eloquent laravel-5.2

我有一个产品类,其中指定了两个类别ID。我设置了以下关系,现在我想要对products结果集进行分页。

public function productsWithFirstCategory()
{
    return $this->hasMany('App\Entities\Product', 'category1_id');
}

public function productsWithSecondCategory()
{
    return $this->hasMany('App\Entities\Product', 'category2_id');
}

public function products()
{
    return $this->productsWithFirstCategory->merge($this->productsWithSecondCategory);
}

public function getProductsPaginatedAttribute()
{
    return $this->products()->paginate(20);
}

看来我无法对结果进行分页,因为合并不会返回查询构建器 - 如何对合并的结果集进行分页?

1 个答案:

答案 0 :(得分:1)

当您执行 $ this-> productsWithFirstCategory 时,您正在访问结果集合而不是查询构建器,而 paginate()只能用于查询构建器。

为了得到你需要的东西,你需要做2个查询的联合。只需将您的产品()方法替换为:

public function products()
{
  return $this->productsWithFirstCategory()->union($this->productsWithSecondCategory());
}

这将返回2个查询构建器的并集,您可以稍后在 getProductsPaginatedAttribute()方法中对其进行分页。