数据查询过滤
model-grid提供了一系列的方法实现表格数据的查询过滤:
$grid->filter(function($filter){// 去掉默认的id过滤器$filter->disableIdFilter();// 自定义id过滤器,在去掉默认id过滤器后必须调用 setId 方法,// 并设置一个和主键不同的值,自定义的id过滤器才会显示。$filter->equal('id', '产品序列号')->setId('product_id');// 在这里添加字段过滤器$filter->like('name', 'name');...});
查询类型
目前支持的过滤类型有下面这些:
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);
大于
sql: ... WHEREcolumn> "$input":
$filter->gt('column', $label);
小于
sql: ... WHEREcolumn< "$input":
$filter->lt('column', $label);
between
sql: ... WHEREcolumnBETWEEN "$start" AND "$end":
$filter->between('column', $label);// 设置datetime类型$filter->between('column', $label)->datetime();// 设置time类型$filter->between('column', $label)->time();
in
sql: ... WHEREcolumnin (...$inputs):
$filter->in('column', $label)->multipleSelect(['key' => 'value']);
notIn
sql: ... WHEREcolumnnot 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
可以用where来构建比较复杂的查询过滤
sql: ... WHEREtitleLIKE "%$input" ORcontentLIKE "%$input":
$filter->where(function ($query) {$query->where('title', 'like', "%{$this->input}%")->orWhere('content', 'like', "%{$this->input}%");}, 'Text');
sql: ... WHERErate>= 6 ANDcreated_at= {$input}:
$filter->where(function ($query) {$query->whereRaw("`rate` >= 6 AND `created_at` = {$this->input}");}, 'Text');
关系查询,查询对应关系profile的字段:
$filter->where(function ($query) {$query->whereHas('profile', function ($query) {$query->where('address', 'like', "%{$this->input}%")->orWhere('email', 'like', "%{$this->input}%");});}, '地址或手机号');
表单类型
text
表单类型默认是text input,可以设置placeholder:
$filter->equal('column')->placeholder('请输入。。。');
也可以通过下面的一些方法来限制用户输入格式:
$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 参考 https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md$filter->equal('column')->decimal($options = []);// $options 参考 https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md$filter->equal('column')->currency($options = []);// $options 参考 https://github.com/RobinHerbots/Inputmask/blob/4.x/README_numeric.md$filter->equal('column')->percentage($options = []);// $options 参考 https://github.com/RobinHerbots/Inputmask, $icon为input前面的图标$filter->equal('column')->inputmask($options = [], $icon = 'pencil');
select
$filter->equal('column')->select(['key' => 'value'...]);// 或者从api获取数据,api的格式参考model-form的select组件$filter->equal('column')->select('api/users');
multipleSelect
一般用来配合in和notIn两个需要查询数组的查询类型使用,也可以在where类型的查询中使用:
$filter->in('column')->multipleSelect(['key' => 'value'...]);// 或者从api获取数据,api的格式参考model-form的multipleSelect组件$filter->in('column')->multipleSelect('api/users');
radio
比较常见的场景是选择分类
$filter->equal('released')->radio(['' => 'All',0 => 'Unreleased',1 => 'Released',]);
checkbox
比较常见的场景是配合whereIn来做范围筛选
$filter->in('gender')->checkbox(['m' => 'Male','f' => 'Female',]);
datetime
通过日期时间组件来查询,$options的参数和值参考bootstrap-datetimepicker
$filter->equal('column')->datetime($options);// `date()` 相当于 `datetime(['format' => 'YYYY-MM-DD'])`$filter->equal('column')->date();// `time()` 相当于 `datetime(['format' => 'HH:mm:ss'])`$filter->equal('column')->time();// `day()` 相当于 `datetime(['format' => 'DD'])`$filter->equal('column')->day();// `month()` 相当于 `datetime(['format' => 'MM'])`$filter->equal('column')->month();// `year()` 相当于 `datetime(['format' => 'YYYY'])`$filter->equal('column')->year();
