diff --git a/packages/tables/docs/04-filters/04-query-builder.md b/packages/tables/docs/04-filters/04-query-builder.md index 7c499b2a3f..beec44a73e 100644 --- a/packages/tables/docs/04-filters/04-query-builder.md +++ b/packages/tables/docs/04-filters/04-query-builder.md @@ -347,6 +347,49 @@ TextConstraint::make('author') ->icon('heroicon-m-user') ``` +## Overriding the default operators + +Each constraint type has a set of default operators, which you can customize by using the `operators()`method: + +```php +use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\IsFilledOperator; +use Filament\Tables\Filters\QueryBuilder\Constraints\TextConstraint; + +TextConstraint::make('author') + ->relationship(name: 'author', titleAttribute: 'name') + ->operators([ + IsFilledOperator::make(), + ]) +``` + +This will remove all operators, and register the `EqualsOperator`. + +If you'd like to add an operator to the end of the list, use `pushOperators()` instead: + +```php +use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\IsFilledOperator; +use Filament\Tables\Filters\QueryBuilder\Constraints\TextConstraint; + +TextConstraint::make('author') + ->relationship(name: 'author', titleAttribute: 'name') + ->pushOperators([ + IsFilledOperator::class, + ]) +``` + +If you'd like to add an operator to the start of the list, use `unshiftOperators()` instead: + +```php +use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\IsFilledOperator; +use Filament\Tables\Filters\QueryBuilder\Constraints\TextConstraint; + +TextConstraint::make('author') + ->relationship(name: 'author', titleAttribute: 'name') + ->unshiftOperators([ + IsFilledOperator::class, + ]) +``` + ## Creating custom constraints Custom constraints can be created "inline" with other constraints using the `Constraint::make()` method. You should also pass an [icon](#customizing-the-constraint-icon) to the `icon()` method: diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php b/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php index 11d100cb7d..4189c945b8 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php @@ -38,6 +38,17 @@ trait HasOperators * @param array | Operator> $operators */ public function operators(array $operators): static + { + $this->operators = []; + $this->pushOperators($operators); + + return $this; + } + + /** + * @param array | Operator> $operators + */ + public function pushOperators(array $operators): static { foreach ($operators as $operator) { if (is_string($operator)) {