所以我知道如何使用paginate()
分页,并且我知道如何基于Accessor(集合上的awhere()
)进行筛选。但是,paginate接受查询生成器,集合上的where()返回集合。
所以,如果我想通过一个自定义属性得到一堆项/过滤器,然后对结果集分页……我该怎么做??
Accessor:
public function getRequiredToReportAttribute()
{
// return boolean based off of complicated business logic
}
索引方法:
public function index()
{
//what im doing (redacted)
$employers = (new App\Employers')->paginate($this->perPage);
// what I would like to be doing
$employers = (new App\Employers)->where('required_to_report', '=', true)->paginate($this->perPage);
return $this->sendResponse($employers);
}
最佳答案
如果要使用accesors,可以在获取查询后迭代集合,如下所示:
$result = Model::get()->filter(function($item) {
return $item->require_to_report === true;
});
这里有模型的所有记录,然后可以创建手动分页器:
$paginator = new Illuminate\Pagination\Paginator($result, 10);
这种方法有一个弱点,当您有太多的记录时,性能可能会受到影响。