$grid->filter(function($filter){// Remove the default id filter $filter->disableIdFilter();// Add a column filter $filter->like('name','name');...});
Style
Adjust the style of the filter query panel, from the original pop-up modal to the embedded table header, click the filter button to expand the display, the default is not expanded, you can let it expand by default in the following way:
// Operate on the `$grid` instance$grid->expandFilter();// Or manipulate the `$filter` instance in the filter callback$filter->expand();
Define the scope of the query
You can define your most commonly used query as a query scope, which will appear in the drop-down menu of the filter button. Here are a few examples:```php
The first parameter of the scope method is the key of the query. It will appear in the url parameter. The second parameter is the label of the drop-down menu item. If not filled, the first parameter will be displayed as the label.
You can call any eloquent query condition after the scope method.
Filter type
Currently supported filter types are the following:
Equal
sql: ... WHEREcolumn= ""$input"":
$filter->equal('column', $label);
Not equal
sql: ... WHEREcolumn!= ""$input"":
$filter->notEqual('column', $label);
Like
sql: ... WHEREcolumnLIKE "%"$input"%":
$filter->like('column', $label);
Ilike
sql: ... WHEREcolumnILIKE "%"$input"%":
$filter->ilike('column', $label);
contains
Equal to like query
$filter->contains('title');
starts with
Query title field data starting with input
$filter->startsWith('title');
starts with
Query title field data ending with input
$filter->endsWith('title');
Greater then
sql: ... WHEREcolumn> "$input":
$filter->gt('column', $label);
Less than
sql: ... WHEREcolumn< "$input":
$filter->lt('column', $label);
Between
sql: ... WHEREcolumnBETWEEN "$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();
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('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',]);
Multi-column layout
If there are too many filters, the page will be pulled long, which will affect the look and feel of the page. This version will support the multi-column layout of the filter. For example, 6 filters are displayed in two columns.
By default, there will be a filter for the primary key field in the first column, and all three filters for the left and right will have a total of 6 filters.
The first parameter of the column method sets the column width, which can be set to the scale 1/2 or 0.5, or the width of the grid column of the bootstrap is 6. If it is three columns, it can be set to 1/3.or 4
Filter group
Sometimes you need to set multiple filtering methods for the same field, you can do it in the following way.
// equals$group->equal();// not equal to$group->notEqual();// more than the$group->gt();// less than$group->lt();// greater or equal to$group->nlt();// less than or equal to$group->ngt();// match$group->match();// Complex conditions$group->where();// like query$group->like();// like query$group->contains();// ilike query$group->ilike();// start with the input$group->startWith();// end with the input$group->endWith();