1. Go to this page and download the library: Download meius/laravel-filter library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
meius / laravel-filter example snippets
use App\Attributes\Filter\ApplyFiltersTo;
use App\Models\Post;
class PostController
{
#[ApplyFiltersTo(Post::class)]
public function index()
{
return Post::query()->get();
}
}
use App\Attributes\Filter\ApplyFiltersTo;
use App\Models\Author;
use App\Models\Comment;
use App\Models\Post;
class PostController
{
#[ApplyFiltersTo(Post::class, Comment::class, Author::class)]
public function index()
{
return Post::query()
->with([
'comments',
'author',
])
->get();
}
}
return [
// Filters will not be applied to API route groups with this change.
'route_groups' => [
//'api',
'web',
],
];
use Illuminate\Database\Eloquent\Builder;
use Meius\LaravelFilter\Filters\Filter;
class TitleFilter extends Filter
{
/**
* The key used to identify the filter parameter in the request.
*/
protected string $key = 'title';
protected function query(Builder $builder, $value): Builder
{
return $builder->where('title', 'like', "%$value%");
}
}
use Illuminate\Database\Eloquent\Builder;
use Meius\LaravelFilter\Filters\Filter;
class AuthorIdFilter extends Filter
{
protected string $key = 'author_id';
protected function query(Builder $builder, $value): Builder
{
return $builder->whereHas('author', function (Builder $query) use ($value): void {
$query->where('id', '=', $value);
});
}
}
use Illuminate\Database\Eloquent\Builder;
use Meius\LaravelFilter\Filters\Filter;
class OwnerFilter extends Filter
{
protected string $key = 'owner';
protected function query(Builder $builder, $value): Builder
{
return $builder->where('user_id', '=', $value);
}
protected function canContinue(Request $request): bool
{
return $request->user()->hasSubscription();
}
};
use App\Models\User;
use App\Models\Category;
use Meius\LaravelFilter\Attributes\ExcludeFrom;
use Meius\LaravelFilter\Filters\Filter;
// The filter will never be applied to the "User" model and beyond.
#[ExcludeFrom(User::class, Category::class, ...)]
class ContentFilter extends Filter
{
protected string $key = 'content';
protected function query(Builder $builder, $value): Builder
{
// Filter logic
}
}
use App\Models\Post;
use App\Models\Comment;
use Meius\LaravelFilter\Attributes\OnlyFor;
use Meius\LaravelFilter\Filters\Filter;
// The filter will be applied to the "Post" model and beyond only.
#[OnlyFor(Post::class, Comment::class, ...)]
class ContentFilter extends Filter
{
protected string $key = 'content';
protected function query(Builder $builder, $value): Builder
{
// Filter logic
}
}
use App\Models\Comment;
use App\Models\Post;
use App\Models\User;
use Meius\LaravelFilter\Attributes\ExcludeFrom;
use Meius\LaravelFilter\Attributes\OnlyFor;
use Meius\LaravelFilter\Filters\Filter;
// The filter will be applied to the "Comment" and "User" models only.
#[
OnlyFor(Post::class, Comment::class, User::class),
ExcludeFrom(Post::class),
]
class ContentFilter extends Filter
{
protected string $key = 'content';
protected function query(Builder $builder, $value): Builder
{
// Filter logic
}
}
use App\Models\Comment;
use App\Models\Post;
use Meius\LaravelFilter\Filters\Filter;
class ContentFilter extends Filter
{
/**
* The models to which the filter should exclusively apply.
*
* @var array<Model>
*/
protected array $onlyFor = [
Comment::class,
Post::class,
];
/**
* The models to which the filter should not be applied.
*
* @var array<Model>
*/
protected array $excludeFrom = [];
protected string $key = 'content';
protected function query(Builder $builder, $value): Builder
{
// Filter logic
}
}
use App\Models\Comment;
use App\Models\Post;
use Meius\LaravelFilter\Filters\Filter;
class ContentFilter extends Filter
{
protected string $key = 'content';
protected function query(Builder $builder, $value): Builder
{
// Filter logic
}
protected function onlyFor(): array
{
return [
User::class,
Category::class,
];
}
protected function excludeFrom(): array
{
return [];
}
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Meius\LaravelFilter\Traits\HasFilterAlias;
class HtmlFivePackage extends Model
{
use HasFilterAlias;
protected string $filterAlias = 'h5p';
}
return [
'prefix' => 'f',
];
use Illuminate\Database\Eloquent\Builder;
use Meius\LaravelFilter\Filters\Filter;
class ComplexFilter extends Filter
{
protected string $key = 'complex_filter';
protected function query(Builder $builder, $value): Builder
{
return $builder->where('status', 'active')
->where(function ($query) use ($value) {
$query->where('name', 'like', "%{$value}%")
->orWhere('description', 'like', "%{$value}%");
});
}
}
use Illuminate\Database\Eloquent\Builder;
use Meius\LaravelFilter\Filters\Filter;
class CombinedFilter extends Filter
{
protected string $key = 'combined_filter';
protected function query(Builder $builder, $value): Builder
{
return $builder->where('category', $value['category'])
->where('price', '>=', $value['min_price'])
->where('price', '<=', $value['max_price']);
}
}
use Illuminate\Database\Eloquent\Builder;
use Meius\LaravelFilter\Filters\Filter;
class TitleFilter extends Filter
{
protected string $key = 'title';
protected function query(Builder $builder, $value): Builder
{
return $builder->whereRaw('title ILIKE ?', ["%{$value}%"]);
}
}
use Illuminate\Database\Eloquent\Builder;
use Meius\LaravelFilter\Filters\Filter;
class TitleFilter extends Filter
{
protected string $key = 'title';
protected function query(Builder $builder, $value): Builder
{
return $builder->where('title', 'like', "%{$value}%");
}
}