我有一个产品类,其中指定了两个类别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);
}
看来我无法对结果进行分页,因为合并不会返回查询构建器 - 如何对合并的结果集进行分页?
答案 0 :(得分:1)
当您执行 $ this-> productsWithFirstCategory 时,您正在访问结果集合而不是查询构建器,而 paginate()只能用于查询构建器。
为了得到你需要的东西,你需要做2个查询的联合。只需将您的产品()方法替换为:
public function products()
{
return $this->productsWithFirstCategory()->union($this->productsWithSecondCategory());
}
这将返回2个查询构建器的并集,您可以稍后在 getProductsPaginatedAttribute()方法中对其进行分页。