У меня есть ресурс с таблицей. Я хочу изменить запрос таблицы на основе условия, т.е. наличия фильтра.
->modifyQueryUsing(function (Builder $query){
if (tableFilter)
{
return $query->with('studentAcademics');
}
else
{
return $query->whereNull('id');
}
})
Как я могу проверить, есть ли активный фильтр таблицы?
Какую нить вы используете? В2 или В3? Для версии 3 может быть полезен этот образец документа: Таблицы нитей Посмотрев на пример, вы заметите метод «->filters([», который обрабатывает данные таблицы в соответствии с состоянием столбца «x» таблицы.
@AntonioGocaj Я использую «нить/нить»: «^3.2.108». Что я действительно хочу сделать, так это запретить загрузку данных в таблицу до тех пор, пока не будет применен фильтр.
В моем случае это сработало:
->modifyQueryUsing(function (Builder $query, Table $table) {
$filters = $table->getFilters();
// Check if any filters are applied
$hasActiveFilters = collect($filters)
->some(fn ($filter) => $filter->isActive());
if ($hasActiveFilters) {
// If filters are active, modify the query accordingly
return $query->with('studentAcademics');
} else {
// If no filters are active, apply a different query modification
return $query->whereNull('id');
}
})
Чтобы проверить, существует ли активный табличный фильтр в Laravel Filament, и соответствующим образом изменить запрос Eloquent, вы можете использовать метод getFilters в методеmodifyQueryUsing.
getFilters: извлекает все фильтры, примененные к таблице.
isActive: проверяет, активен ли в данный момент конкретный фильтр.
Спасибо @Raju Mondal. Я пробовал, но постоянно получаю сообщение *Method Filament\Tables\Filters\SelectFilter::isActive не существует. Кажется, isActive() не работает! Я использую «нить/нить»: «^3.2.108»
Это решило мою проблему
->modifyQueryUsing(function (Builder $query, Table $table) {
$filters = $table->getFilters();
// Check if any filters are applied
$hasActiveFilters = collect($filters)
->some(function ($filter){
return $filter->getActiveCount() > 0 ? true:false;
});
if ($hasActiveFilters) {
// If filters are active, modify the query accordingly
return $query->with('studentAcademics');
} else {
// If no filters are active, apply a different query modification
return $query->whereNull('id');
}
})
@RajuModal Спасибо за идею, которую вы подали. Я изменил с $hasActiveFilters = Collect($filters) ->some(fn ($filter) => $filter->isActive()); to $hasActiveFilters = Collect($filters) ->some(function ($filter){ return $filter->getActiveCount() > 0 ? true:false; });
что такое tableFilter?