Skip to content

dlimars/laravel-searchable

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel Searchable

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

a simple trait to use with your Laravel Models

Installation

open terminal and run: composer require dlimars/laravel-searchable

Configuration

just add in your models

    class MyModel extends Model {
        use Dlimars\LaravelSearchable\Searchable;
        private $searchable = [
            'name'          => 'LIKE',
            'id'            => 'MATCH',
            'created_at'    => 'BETWEEN'
        ];
    }

Usage

just call search() method in model

    $filters = [
        'name'          => 'foo bar',
        'id'            => '10',
        'created_at'    => ['2010-01-01 00:00:00', '2015-01-01 23:59:59']
    ];

    $users = User::search($filters)->get();
    // produces $query->where('name', 'LIKE', '%foo%')
    //                ->where('name', 'LIKE', '%bar%')
    //                ->where('id', '10')
    //                ->where('created_at', '>=', '2010-01-01 00:00:00')
    //                ->where('created_at', '<=', '2015-01-01 23:59:59')

    $filters = [
        'created_at'    => ['2010-01-01 00:00:00', null]
    ];
    //  produces $query->where('created_at', '>=', '2010-01-01 00:00:00')

    $filters = [
        'created_at'    => [null, '2015-01-01 23:59:59']
    ];
    //  produces $query->where('created_at', '<=', '2015-01-01 23:59:59')

you can also use with request

    $users = User::search($request()->all())->get();

Default Operators

    'LIKE'      // produces $query->where('field', 'LIKE', '%{$value}%')
    'MATCH'     // produces $query->where('field', $value)
    'BETWEEN'   // produces $query->where('field', '>=', $value[0])
                //                ->where('field', '<=', $value[1])

Custom Operators

You can create a custom scope in your models, and call as operator.

Example of class:

    class Customer extends EloquentModel
    {
        use Searchable;
        
        public $fillable = [
            'firstname',
            'lastname'
        ];
        
        public $searchable = [
            'id'    => 'MATCH',
            'name'  => 'myCustomSearchByName'
        ]
        
        public function scopeMyCustomSearchByName($queryBuilder, $name)
        {
            $name = str_slug($name, "%");
    
            $queryBuilder->where(
                \DB::raw('CONCAT(firstname, " ", lastname'),
                'LIKE',
                "%{$name}%"
            );
        }
    }

and call

    $filters   = ['name' => 'Foo bar example'];
    $customers = Customer::search($filters)->get();

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages