PHP code example of meius / laravel-filter

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}%");
        }
    }
    
bash
    php artisan vendor:publish --tag=filter-config
    
bash
   php artisan vendor:publish --tag=filter-config
   
bash
    php artisan filter:cache