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

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

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

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

🤔 А знаете ли вы, что...
В Laravel используется язык программирования PHP.


50
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: проверяет, активен ли в данный момент конкретный фильтр.


Решено

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

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