Model grid filters
model-grid
Provides a set of data filters:
$grid->filter(function($filter){
// Remove the default id filter
$filter->disableIdFilter();
// Add a column filter
$filter->like('name', 'name');
...
});
Filter type
Currently supported filter types are the following:
Equal
sql: ... WHERE
column= ""$input""
:
$filter->equal('column', $label);
Not equal
sql: ... WHERE
column!= ""$input""
:
$filter->notEqual('column', $label);
Like
sql: ... WHERE
columnLIKE "%"$input"%"
:
$filter->like('column', $label);
Ilike
sql: ... WHERE
columnILIKE "%"$input"%"
:
$filter->ilike('column', $label);
Greater then
sql: ... WHERE
column> "$input"
:
$filter->gt('column', $label);
Less than
sql: ... WHERE
column< "$input"
:
$filter->lt('column', $label);
Between
sql: ... WHERE
columnBETWEEN "$start" AND "$end"
:
$filter->between('column', $label);
// set datetime field type
$filter->between('column', $label)->datetime();
// set time field type
$filter->between('column', $label)->time();
In
sql: ... WHERE
columnin (...$inputs)
:
$filter->in('column', $label)->multipleSelect(['key' => 'value']);
NotIn
sql: ... WHERE
columnnot in (...$inputs)
:
$filter->notIn('column', $label)->multipleSelect(['key' => 'value']);
Date
sql: ... WHERE DATE(
column) = "$input"
:
$filter->date('column', $label);
Day
sql: ... WHERE DAY(
column) = "$input"
:
$filter->day('column', $label);
Month
sql: ... WHERE MONTH(
column) = "$input"
:
$filter->month('column', $label);
year
sql: ... WHERE YEAR(
column) = "$input"
:
$filter->year('column', $label);
Where
You can use where
to build more complex query filtering
sql: ... WHERE
titleLIKE "%$input" OR
contentLIKE "%$input"
:
$filter->where(function ($query) {
$query->where('title', 'like', "%{$this->input}%")
->orWhere('content', 'like', "%{$this->input}%");
}, 'Text');
sql: ... WHERE
rate>= 6 AND
created_at= {$input}
:
$filter->where(function ($query) {
$query->whereRaw("`rate` >= 6 AND `created_at` = {$this->input}");
}, 'Text');
Relationship query, query the corresponding relationship profile
field:
$filter->where(function ($query) {
$query->whereHas('profile', function ($query) {
$query->where('address', 'like', "%{$this->input}%")->orWhere('email', 'like', "%{$this->input}%");
});
}, 'Address or mobile');
Field type
The default field type is text input, set placeholder for text input:
$filter->equal('column')->placeholder('Please input...');
You can also restrict the user input format by using some of the following methods:
$filter->equal('column')->url();
$filter->equal('column')->email();
$filter->equal('column')->integer();
$filter->equal('column')->ip();
$filter->equal('column')->mac();
$filter->equal('column')->mobile();
// $options refer to https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
$filter->equal('column')->decimal($options = []);
// $options refer to https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
$filter->equal('column')->currency($options = []);
// $options refer to https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md
$filter->equal('column')->percentage($options = []);
// $options refer to https://github.com/RobinHerbots/Inputmask
$filter->equal('column')->inputmask($options = [], $icon = 'pencil');
Select
$filter->equal('column')->select(['key' => 'value'...]);
// Or from the api to obtain data, api format reference model-form `select` component
$filter->equal('column')->select('api/users');
multipleSelect
Generally used in conjunction with in
andnotIn
need to query the array of two types of inquiries can also be used in the type
type of query:
$filter->in('column')->multipleSelect(['key' => 'value'...]);
// // Or from the api to obtain data, api format reference model-form `multipleSelect` component
$filter->in('column')->multipleSelect('api/users');
radio
The more common scenario is the selection of categories
$filter->equal('released')->radio([
'' => 'All',
0 => 'Unreleased',
1 => 'Released',
]);
checkbox
The more common scene is do the scope query with whereIn
:
$filter->in('gender')->checkbox([
'm' => 'Male',
'f' => 'Female',
]);
datetime
Use date and time components,$options
parameter and value reference bootstrap-datetimepicker
$filter->equal('column')->datetime($options);
// `date()` equals to `datetime(['format' => 'YYYY-MM-DD'])`
$filter->equal('column')->date();
// `time()` equals to `datetime(['format' => 'HH:mm:ss'])`
$filter->equal('column')->time();
// `day()` equals to `datetime(['format' => 'DD'])`
$filter->equal('column')->day();
// `month()` equals to `datetime(['format' => 'MM'])`
$filter->equal('column')->month();
// `year()` equals to `datetime(['format' => 'YYYY'])`
$filter->equal('column')->year();
Complex query filter
You can use the $this->input
to trigger complex custom queries:
$filter->where(function ($query) {
switch ($this->input) {
case 'yes':
// custom complex query if the 'yes' option is selected
$query->has('somerelationship');
break;
case 'no':
$query->doesntHave('somerelationship');
break;
}
}, 'Label of the field', 'name_for_url_shortcut')->radio([
'' => 'All',
'yes' => 'Only with relationship',
'no' => 'Only without relationship',
]);