rostislav / laravel-filters
v1.0.6.6
2025-08-25 14:09 UTC
Requires
- php: >=8.0
- laravel/framework: 5.*|6.*|7.*|8.*|9.*|10.*|11.*|12.*
- staudenmeir/eloquent-has-many-deep: ^1.19
README
# 📦 Laravel Filters — Универсальный фильтр для Eloquent и Query Builder > Простой, мощный и гибкий инструмент для фильтрации, сортировки и поиска данных в Laravel через URL-параметры. **Laravel Filters** позволяет вам строить сложные API-запросы без написания ручных `where`, `with`, `has`, `orderBy` и т.д. — всё делается через URL-параметры. Подходит для админок, API, дашбордов и любых систем с фильтрами. --- ## ✅ Возможности | Функция | Описание | |--------|----------| | 🔍 **Фильтрация по полям** | `?filterEQ[status]=active&filterEQ[category_id]=5` | | 🧩 **Фильтрация по связям (whereHas)** | `?filterEQ[category.name]=Books&filterLIKE[user.email]=@gmail.com` | | 🔗 **Eager loading (`with`)** | `?extends=user,posts` | | 📊 **Подсчёт связанных моделей (`withCount`)** | `?extendsCount=comments,likes` | | ⚖️ **Поиск по нескольким полям (`filterQ`)** (требуется указывать по каким полям) | `?filterQ=John` — ищет по `name`, `email`, `phone` | | 🔁 **Исключение связей (`doesntHave`)** | `?doesntHave=posts` — только пользователи без постов | | 📏 **Сортировка** | `?sort=-created_at,name` — по убыванию/возрастанию | | 📑 **Пагинация** | Автоматическая с `?limit=20` | --- ## 🛠 Установка ```bash composer require rostislav/laravel-filters ## Использование use Illuminate\Http\Request; use Rostislav\LaravelFilters\Filter; // В контроллере: public function index(Request $request) // получение списка { return Filter::all( $request, // Запрос от пользователя Post::class, // Модель или QueryBuilder ['name', 'email', 'status'], // Разрешённые для фильтрации поля [], // Вложенные условия (см. ниже) ['title', 'LIKE'], // Поля для поиска filterQ ['name', 'LIKE', 'category'], // Поиск в таблице по связи с category ['content', 'LIKE'], ); } public function show(Request $request, int $id) // получение одной записи { return Filter::one( $request, // Запрос от пользователя Post::class, // Модель $id, // Идентификатор [['email', 'like', '@company.com']] // Дополнительные условия ); } ## Доступные фильтры: пример использования: filterEQ[title]=name В ORM - Post::where('title', 'name') Доступные значения: EQ - = NEQ - != EQN - IS NULL NEQN - IS NOT NULL GEQ - >= LEQ - <= GE - > LE - < LIKE - < IN - in NotIN - not in