PHP code example of lukesnowden / filterable

1. Go to this page and download the library: Download lukesnowden/filterable library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

lukesnowden / filterable example snippets




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() );
    }
    
}



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}%" );
            }
        };
    }
    
}

 

$customers = Customer::query();

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

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



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 );
});