lukesnowden/filterable

Laravel 构建器过滤器工具

v0.0.1 2018-10-05 09:22 UTC

This package is auto-updated.

Last update: 2024-09-06 10:46:09 UTC


README

此特性允许您轻松创建可过滤的模型。

composer require lukesnowden/filterable:dev-master

操作步骤

以下是可过滤类的默认设置,此设置允许您过滤客户的结果;

<?php

namespace App\Customers\Filters;

use Lukesnowden\Filterable\Traits\Filterable;
use App\Customers\Filters\OrderByd;
use App\Customers\Filters\Methods;

class FilterCustomers
{

    use Filterable;

    /**
     * @var string
     */
    protected static $defaultOrderBy = 'forename';

    /**
     * Called just before filtering to set local filters
     * @return void
     */
    public function preFilter()
    {
        self::addOrderBys( new OrderBys() );
        self::addFilters( new Methods() );
    }
    
}

默认情况下,排序方法是 forename。我们还设置了一些默认的 orderBysfilters。下面只显示了用于姓氏的一个 ordderBy 和一个 filter 方法。

<?php

namespace App\Customers\Filters;

use Closure;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;

class OrderBys
{

    /**
     * @return Closure
     */
    public function forename() : Closure
    {
        return function( Builder $builder, $order )
        {
            $builder->orderBy( 'forename', $order );
        };
    }
    
}

Class Methods
{
    
    /**
     * @return Closure
     */
    public function forename() : Closure
    {
        return function( Builder $builder, Request $request )
        {
            if( $forename = $request->input( 'forename' ) ) {
                $builder->where( 'forename', 'like', "%{$forename}%" );
            }
        };
    }
    
}

现在我们可以使用这个来对客户模型进行排序;

<?php 

$customers = Customer::query();

( new FilterCustomers( $customers, request() ) )->filter();

$customers = $customers->paginate( 20 );

您也可以添加新的 ordderByfilter 方法;

<?php

FilterCustomers::addFilter( 'emailAddress', function( Builder $builder, Request $request ) 
{
    if( $email = $request->input( 'email' ) ) {
        $builder->where( 'email', 'like', "%{$email}%" );
    }
});

FilterCustomers::addOrderBy( 'emailAddress', function( Builder $builder, $order ) 
{
    $builder->orderBy( 'email', $order );
});

MIT 许可证

版权所有 © 2018 Luke Snowden

在此条件下,任何人都可以免费获得本软件及其相关文档副本(以下简称“软件”),无限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供者提供软件的人这样做,前提是

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,明示或暗示,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论此类索赔、损害或其他责任是基于合同、侵权或其他方式,无论是否源于、因之或与此软件的使用或其他交易有关。