所以我知道如何使用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);

这种方法有一个弱点,当您有太多的记录时,性能可能会受到影响。

07-25 22:58