对口才模型进行自定义过滤

时间:2019-04-07 09:58:43

标签: php laravel eloquent laravel-query-builder

我的应用程序支持使用过滤器获取数据。我当前的实现(效果很好)是

Model::select($fields)->with($relations)->tap(function ($query) use ($filters) {
  // A lot of filtering logic here
  // $query->where()...... 
})->get();

但是,我想将过滤逻辑直接移到模型中,所以我可以这样做

Model::select($fields)
  ->with($relations)
  ->applyFilters($filters)
  ->get();

我尝试将filter方法添加到Model,但那时我正在使用Builder,但它无法识别我的功能:

  

调用未定义的方法Illuminate \ Database \ Eloquent \ Builder :: applyFilters()

除了创建新的构建器类并使用它之外,还有其他更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

我知道了!我只需要在<img id="blah" src="#" alt="your image" style="display: inline-block;"/> <input type="file" onchange="readURL(this);"/> 类中添加一个scopeApplyFilters。它会自动注入Model作为第一个参数,因此逻辑最终看起来像

Builder

然后我可以用public function scopeApplyFilters($query, $filters) { // Perform filtering logic with $query->where(...); return $query; }

来称呼它