dlimars / laravel-searchable
A Simple trait search for Laravel Models
Installs: 41 972
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 3
Forks: 0
Open Issues: 0
Requires (Dev)
- phpunit/phpunit: 4.0.*
README
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();