Whats New v2
Added
FilterType Enum
All core filters provided by this package can be used via string or via new FilterType
enum.
Filter::field('name', ['$like']);
Filter::field('name', [FilterType::LIKE]);
Required Filters
Filters can be marked as required.
Filter::field('name', [FilterType::LIKE])->required();
Pivot Filters
Pivot filter support for BelongsToMany
and MorphToMany
relationships.
Filter::field('tagged_by', [FilterType::EQUAL])->pivot(Post::class);
Morph Filters
FilterType::HAS_MORPH
FilterType::DOESNT_HAS_MORPH
Filter::morphRelation(
'subscribable',
[FilterType::HAS_MORPH],
)->includeRelationFields([
FoodDeliveryService::class,
Sass::class,
])
Validation Rules
Validation rules, messages, and attributes can be defined on a per FilterType
basis.
Filter::field('status', [
FilterType::IN->withValidation([
'value.*' => [Rule::enum(OrderStatus::class)]
])
]),
Filter Modifiers
Exceptions
New exceptions for new features.
class InvalidFiltersPayloadException extends InvalidArgumentException
// When filters are passed to ::filter() that are not list arrays.
class InvalidModelFqcnException extends InvalidArgumentException
// When an invalid model string is passed to `Filter::morphType()` or `Filter::morphRelation()->includeRelationFields()`.
class UnsupportedModifierException extends InvalidArgumentException
// When an invalid modifier is passed to ->withModifiers().
class RequiredFilterException extends ValidationException
// When required filter(s) were not applied.
Changed
Qualifying Columns
By default, columns are now qualified with database table when using Filter::field()
with any of the core filters provided by this package.
Custom Filters Structure
Custom filters no longer should extend abstract classes.
See custom filters for how custom filter classes should now be structured.
Removed
Filters
Some dedicated filter classes were removed in favour of new modifiers feature.
$like:start
.$like:end
.$notLike:start
.$notLike:end
.
allowedFilters()
definitions should be updated.
public function allowedFilters(): AllowedFilterList
{
return Filter::only(
// old
// Filter::field('name', ['$notLike:end']),
// new (start & end modifiers enabled)
Filter::field('name', [FilterType::NOT_LIKE]),
// new (just end modifier enabled)
Filter::field('name', [FilterType::NOT_LIKE->withModifiers('end')]),
);
}
Filter::all()
Filter::all()
has been removed due to not being able to support pivot filters feature.
Target::relationAlias()
has been removed due to Filter::all()
being removed.
Types::except()
Removed due to un-needed complexity.
Config
default_allowed_filter_list
has been removed from the config file due to Filter::all()
being removed.
All Filterable
models default to no filters allowed.