labrodev/laravel-filter-components

用于扩展CRUD操作中过滤器功能的包(使用Spatie Laravel Query Builder)

v1.0.1 2023-11-30 17:24 UTC

This package is auto-updated.

Last update: 2024-09-30 02:02:56 UTC


README

这是一个Laravel包,用于扩展Laravel项目中过滤功能。如果您有一个项目列表并且使用spatie/laravel-query-builder进行过滤,这个包可能对您很有用。

本包基于spatie/laravel-query-builder用例开发。我们感谢Spatie激发我们的灵感,分享宝贵的经验,并提供出色的Laravel包,我们不仅广泛使用,而且真诚推荐。

QueryBuilder类

在这个包中,您可以找到一些自定义的QueryBuilder部分,用于扩展过滤逻辑。

DateRangeFilter

QueryBuilder类,通过WhereBetween实现按日期范围过滤的逻辑。

IsNotNullFilter

QueryBuilder类,通过whereNull或whereNotNull实现过滤逻辑,根据输入值。可以在我们只需要根据某些标志过滤时使用,这些标志背后有逻辑(例如:有未付款发票 - 是/否)。

WhereInFilter

QueryBuilder类,通过whereIn使用给定的值数组实现过滤逻辑(适用于多选过滤器)。

视图组件

此外,您还可以在这个包中找到根据类型和逻辑渲染的过滤组件。

您可以从这个包中公开供应商视图,以实现过滤组件blade模板的自定义样式,并将其调整到您的布局和主题。

默认情况下,blade中的过滤器组件使用Bootstrap类。

布尔过滤器

视图组件,用于渲染带有选择选项“否”,“是”(或组件属性中定义的自定义选项)的过滤器。

自定义选择过滤器

视图组件,用于渲染带有自定义选择选项的过滤器。

日期范围过滤器

视图组件,用于渲染带有两个日期输入作为日期范围的过滤器(开始日期和结束日期)。

输入过滤器

视图组件,用于渲染带有文本输入的过滤器。

多选字段

视图组件,用于渲染来自给定Eloquent模型的多个选择选项的过滤器。

选择字段

视图组件,用于渲染来自给定Eloquent模型的选择选项的过滤器。

链接

视图组件,用于渲染排序字段。

安装

您可以通过composer安装此包

composer require labrodev/laravel-filter-components

可选,您可以发布视图以将其应用于布局。

php artisan vendor:publish --tag=filter-components-views

可选,您可以发布视图组件以扩展您需要的逻辑。

php artisan vendor:publish --tag=filter-components-components

用法

QueryBuilder类

假设您熟悉Spatie\QueryBuilder并且已经使用Spatie\QueryBuilder实现了过滤逻辑。

您可以通过使用此包中的QueryBuilder类扩展用法:DateRangeFilter、WhereInFilter、IsNotNullFilter。

use Illuminate\Http\Request;
use Labrodev\Filters\QueryBuilder\DateRangeFilter;
use Labrodev\Filters\QueryBuilder\WhereInFilter;
use Labrodev\Filters\QueryBuilder\IsNotNullFilter;
use Spatie\QueryBuilder\AllowedFilter;
use Spatie\QueryBuilder\QueryBuilder;

class YourQuery extends QueryBuilder
{
    public function __construct(Request $request)
    {
        $query = YourModel::query();

        parent::__construct($query, $request);

        //DateRangeFilter
        $this->allowedFilters([
            AllowedFilter::custom('filter_name', new DateRangeFilter(), 'table_column') 
        ]);

        //DateRangeFilter
        $this->allowedFilters([
            AllowedFilter::custom('filter_name', new WhereInFilter(), 'table_column') 
        ]);

        //IsNotNullFilter
        $this->allowedFilters([
            AllowedFilter::custom('filter_name', new IsNotNullFilter(), 'table_column') 
        ]);
    }
}

视图组件

假设您想在CRUD列表中实现过滤。

可能有一个过滤块。假设有一个过滤表单。

<form action="your filter routing" method="GET">
<!-- and here could be components from this package -->
<button type="submit"></button>
</form>

布尔过滤器

<x-filter-boolean-field 
    field="filter[{{ $filterField }}]" 
    name="{{ __('Filter label') }}" 
    options="{{__('Your option 1') }},{{ __('Your option 2')}}">
</x-filter-boolean-field>
  • field - 这是搜索请求中的查询参数
  • name - 这是此过滤器的标签
  • options - 选择框中的选项;如果没有提供,则默认为“否”,“是”选项

自定义选择过滤器

<x-filter-custom-select-field>
    field="filter[{{ $filterField }}]"
    name="{{ __('Filter label') }}"
    options="{{__('Your option 1') }},{{ __('Your option 2')}}">
</x-filter-custom-select-field>
  • field - 这是搜索请求中的查询参数
  • name - 这是此过滤器的标签
  • 选项 - 将在下拉框中显示的选项

日期范围过滤器

<x-filter-date-range-field>
    field="filter[{{ $filterField }}]"
    name="{{ __('Filter label') }}">
</x-filter-date-range-field>
  • field - 这是搜索请求中的查询参数
  • name - 这是此过滤器的标签

输入过滤器

<x-filter-field>
    field="filter[{{ $filterField }}]"
    name="{{ __('Filter label') }}">
</x-filter-field>
  • field - 这是搜索请求中的查询参数
  • name - 这是此过滤器的标签

多选筛选器

<x-filter-multiple-select-field 
    field="filter[{{$filterField}}]"
    name="{{ __('Filter label') }}"
    class="{{ $eloquentModelClass }}"
    value="{{ $eloquentModelProperty}}">
</x-filter-multiple-select-field>
  • field - 这是搜索请求中的查询参数
  • name - 这是此过滤器的标签
  • class - 从该Eloquent模型类中获取选项值的类。例如,如果类是 App\Models\UserGroup,则将渲染 user_groups 表中的所有用户组作为选项
  • value - 显示为选项的属性。例如,如果值为 name,则使用 user_groups 表中的 name 列作为选项;如果您想将两个列分割以作为选项,请在 value 中用逗号分隔:'column1,column2'

选择筛选器

<x-filter-select-field 
     field="filter[{{$filterField}}]"
    name="{{ __('Filter label') }}"
    class="{{ $eloquentModelClass }}"
    value="{{ $eloquentModelProperty}}">
</x-filter-select-field>
  • field - 这是搜索请求中的查询参数
  • name - 这是此过滤器的标签
  • class - 从该Eloquent模型类中获取选项值的类。例如,如果类是 App\Models\UserGroup,则将渲染 user_groups 表中的所有用户组作为选项
  • value - 显示为选项的属性。例如,如果值为 name,则使用 user_groups 表中的 name 列作为选项;如果您想将两个列分割以作为选项,请在 value 中用逗号分隔:'column1,column2'

链接

<x-sort-link name="{{ $fieldToSort }}">
</x-sort-link>
  • name - 排序字段

测试

composer test

PhpStan 检查

composer analyse

变更日志

请参阅 变更日志 了解最近更改的详细信息。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。