Как изменить базу запросов Laravel Filament Eloquent Query по условию?

У меня есть ресурс с таблицей. Я хочу изменить запрос таблицы на основе условия, т.е. наличия фильтра.

->modifyQueryUsing(function (Builder $query){ 
     if (tableFilter) 
        { 
           return $query->with('studentAcademics'); 
        } 
     else
        { 
          return $query->whereNull('id'); 
        } 
    })

Как я могу проверить, есть ли активный фильтр таблицы?

что такое tableFilter?

kris gjika 21.08.2024 17:51

Какую нить вы используете? В2 или В3? Для версии 3 может быть полезен этот образец документа: Таблицы нитей Посмотрев на пример, вы заметите метод «->filters([», который обрабатывает данные таблицы в соответствии с состоянием столбца «x» таблицы.

Antonio Gocaj 21.08.2024 18:01

@AntonioGocaj Я использую «нить/нить»: «^3.2.108». Что я действительно хочу сделать, так это запретить загрузку данных в таблицу до тех пор, пока не будет применен фильтр.

Frederick Osei 27.08.2024 09:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
3
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В моем случае это сработало:

->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»

Frederick Osei 26.08.2024 16:19
Ответ принят как подходящий

Это решило мою проблему

->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; });

Frederick Osei 27.08.2024 09:36

Другие вопросы по теме