Php 如何在Laravel中正确连接模型和自定义类

Php 如何在Laravel中正确连接模型和自定义类,php,laravel,dependency-injection,Php,Laravel,Dependency Injection,我不明白如何正确连接模型和过滤器。我在控制器中使用依赖项注入实现了这一点,但我不喜欢这样的事实,即在应用过滤的每个方法中都需要这样做。如果模型本身能够理解使用哪个类和过滤器,那将非常方便 告诉我如何做得更好 过滤等级: namespace-App\Classes\Filter; 类查询过滤器 { 受保护的$查询; 受保护的$params; 公共函数apply($query,$params) { $this->query=$query; $this->params=$params; foreach

我不明白如何正确连接模型和过滤器。我在控制器中使用依赖项注入实现了这一点,但我不喜欢这样的事实,即在应用过滤的每个方法中都需要这样做。如果模型本身能够理解使用哪个类和过滤器,那将非常方便

告诉我如何做得更好

过滤等级:

namespace-App\Classes\Filter;
类查询过滤器
{
受保护的$查询;
受保护的$params;
公共函数apply($query,$params)
{
$this->query=$query;
$this->params=$params;
foreach($this->filters()作为$filter=>$value){
如果(方法_存在($this$filter)){
$this->$filter($value);
}
}
返回$this->query;
}
公共函数过滤器()
{
返回$this->params;
}
}
继承人为不同型号实施过滤器:

namespace-App\Classes\Filter;
类PositionFilter扩展了QueryFilter
{
公共职能名称(价值)
{
$this->query->where('title','LIKE',“%$value%”);
}
}
类GasStationFilter扩展了QueryFilter
{
公共功能编号($value)
{
$this->query->where('number','LIKE',“%$value%”);
}
公共功能区(价值)
{
$this->query->whereHas('region',function($query)use($value){
$query->where('regions.id',$value);
});
}
}
在控制器中,我用过滤器注入所需的类,并像这样应用过滤(我在模型中使用范围):

公共功能索引(GasStationIndexRequest$request,GasStationFilter$filters)
{
$gasStations=GasStation::with('区域')
->过滤器($request->validated(),$filters)
->采取(10)
->get();
返回GasStationSelect2Resource::collection($gasStations);
}
型号:

namespace-App\Models;
类Gastation扩展了ListModel
{
公共功能区域():BelongsTo
{
返回$this->belongsTo(Region::class);
}
公共函数scopeFilter($query,$params,$filters):生成器
{
返回$filters->apply($query,$params);
}
}

收到俄文stackoverflow的响应收到俄文stackoverflow的响应