我的应用程序支持使用过滤器获取数据。我当前的实现(效果很好)是
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()
除了创建新的构建器类并使用它之外,还有其他更简单的方法吗?
答案 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;
}