如何判断Laravel Filament表过滤器是否活跃并修改Eloquent查询?
在Filament Resource中判断是否存在活跃表过滤器
要实现根据活跃过滤器状态修改数据表查询的需求,你可以通过以下两种可靠方式判断活跃过滤器:
方法1:利用Table实例获取已应用过滤器
在modifyQueryUsing的闭包中注入Filament\Tables\Table实例,调用其getAppliedFilters()方法获取所有激活的过滤器,通过判断返回数组是否为空来确认是否有活跃过滤器:
->modifyQueryUsing(function (Builder $query, \Filament\Tables\Table $table) { $hasActiveFilters = !empty($table->getAppliedFilters()); if ($hasActiveFilters) { return $query->with('studentAcademics'); } else { return $query->whereNull('id'); } })
方法2:通过请求对象读取过滤器参数
Filament会将过滤器参数以filters为键存入请求的查询参数中,直接读取该参数并判断是否非空即可:
->modifyQueryUsing(function (Builder $query, \Illuminate\Http\Request $request) { $hasActiveFilters = !empty($request->query('filters')); if ($hasActiveFilters) { return $query->with('studentAcademics'); } else { return $query->whereNull('id'); } })
注意事项
getAppliedFilters()返回的数组包含所有已激活过滤器的配置与值,空数组代表无活跃过滤器。- 若你使用了自定义命名的过滤器参数,方法2需要根据实际参数名调整
filters键值。
内容的提问来源于stack exchange,提问作者Frederick Osei
相关产品推荐
相关产品推荐

