> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eloquentfiltering.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Allowing Filters

## Overview

By default, all filters are disallowed.

You can define allowed filters in two ways:

### Define On Model

```php {11-23} theme={null}
use IndexZer0\EloquentFiltering\Contracts\IsFilterable;
use IndexZer0\EloquentFiltering\Filter\Filterable\Filter;
use IndexZer0\EloquentFiltering\Filter\Traits\Filterable;
use IndexZer0\EloquentFiltering\Filter\Contracts\AllowedFilterList;
use IndexZer0\EloquentFiltering\Filter\FilterType;

class Product extends Model implements IsFilterable
{
    use Filterable;

    public function allowedFilters(): AllowedFilterList
    {
        return Filter::only(
            Filter::field('name', [FilterType::EQUAL, FilterType::LIKE]),
            Filter::relation(
                'manufacturer',
                [FilterType::HAS, FilterType::DOESNT_HAS],
                Filter::only(
                    Filter::field('name', [FilterType::LIKE])
                )
            )
        );
    }

    public function manufacturer(): BelongsTo
    {
        return $this->belongsTo(Manufacturer::class);
    }
}
```

### Pass to `::filter()`

<Note>
  Passing in an `AllowedFilterList` to `::filter()` method takes priority over `allowedFilters()` on the model.
</Note>

```php {3-12} theme={null}
Product::filter(
    $filters,
    Filter::only(
        Filter::field('name', [FilterType::EQUAL, FilterType::LIKE]),
        Filter::relation(
            'manufacturer',
            [FilterType::HAS, FilterType::DOESNT_HAS],
            Filter::only(
                Filter::field('name', [FilterType::LIKE])
            )
        )
    )
)->get();
```
