列过滤器

未匹配的标注
本文档最新版为 2.x,旧版本可能放弃维护,推荐阅读最新版!

列过滤器

这个功能可以给表格的列设置一个过滤器,可以更方便的根据这一列进行数据表格过滤操作

字符串比较查询

use Dcat\Admin\Grid;

// WHERE `username` = "$input"
$grid->username->filter(
    Grid\Column\Filter\Equal::make()
);

上面的调用可以给 username 这一列的头部加上一个 input 类型的过滤器,点击过滤器图标展开过滤器,输入查询提交后,会对这一列执行 等于 查询。

开启字段值查询

这个功能可以给每一列字段的值设置一个过滤器,点击该列字段的值就可以进行数据表格过滤操作,非常方便。

开启此功能之后会把这个字段的原始值作为搜索内容,不会受 display 方法影响。

use Dcat\Admin\Grid;

// 设置为 label 或调用 display 方法不会影响查询内容
$grid->ip->label()->filter();

// 相当于
$grid->ip->filter(
    Grid\Column\Filter\Equal::make()->valueFilter()
);

鼠标移动到开启了值查询功能的列上面,右边会显示一个放大镜图标

点击列之后,表头会出现重置按钮,点击可以取消筛选

设置值的字段名称

如果当前列的值并非用户想要搜索的值,可以通过以下方法更改字段名称。

$grid->model()->with('user');

// 实际搜索的会是 name 字段的值
$grid->username->filter('name');

// 二维数组
$grid->user_id->filter('user.id');

// 闭包
$grid->user_id->filter(function () {
    return $this->user['id'];
});

隐藏表头的筛选器图标

use Dcat\Admin\Grid;

$grid->user_id->filterByValue();

// 相当于
$grid->user_id->filter(
    Grid\Column\Filter\Equal::make()
        ->valueFilter()
        ->hide()
);

效果如下

其余Input表单类型过滤器

use Dcat\Admin\Grid;

// WHERE `username` LIKE "%{$input}%"
$grid->username->filter(
    Grid\Column\Filter\Like::make()
);

// WHERE `username` LIKE "{$input}%"
$grid->username->filter(
    Grid\Column\Filter\StartWith::make()
);

// WHERE `username` > "$input"
$grid->username->filter(
    Grid\Column\Filter\Gt::make()
);

// WHERE `username` <= "$input"
$grid->username->filter(
    Grid\Column\Filter\Ngt::make()
);

// WHERE `username` < "$input"
$grid->username->filter(
    Grid\Column\Filter\Lt::make()
);

// WHERE `username` >= "$input"
$grid->username->filter(
    Grid\Column\Filter\Nlt::make()
);

时间日期

如果字段是时间、日期相关的字段,可以使用下面的方法

use Dcat\Admin\Grid;

$grid->date()->filter(
    Grid\Column\Filter\Equal::make()->date()
);

$grid->time()->filter(
    Grid\Column\Filter\Like::make()->time()
);

$grid->datetime()->filter(
    Grid\Column\Filter\Gt::make()->datetime('YYYY-MM-DD HH:mm:ss')
);

多选查询

假设需要在表格数据中通过 status 字段过滤一个或者多个状态的数据,使用多选过滤可以非常方便的实现

use Dcat\Admin\Grid;

$grid->column('status', '状态')->filter(
    Grid\Column\Filter\In::make([
        0 => '未知',
        1 => '已下单',
        2 => '已付款',
        3 => '已取消',
    ])
);

范围查询

假设需要通过 price 字段过滤出某个价格范围内的数据

$grid->column('price')->filter(
    Grid\Column\Filter\Between::make()
);

或者是时间、日期范围的过滤

use Dcat\Admin\Grid;

$grid->date()->filter(
    Grid\Column\Filter\Between::make()->date()
);

$grid->time()->filter(
    Grid\Column\Filter\Between::make()->time()
);

$grid->datetime()->filter(
    Grid\Column\Filter\Between::make()->datetime()
);

指定查询字段名

通过setColumnName方法可以指定查询字段的名称

$grid->column('column')->filter(
    Grid\Column\Filter\Equal::make()->setColumnName('custom_column')
);

查询json字段

Since v1.7.0

$grid->column('column')->filter(
    Grid\Column\Filter\Equal::make()->setColumnName('json_column->label')
);

关联关系字段查询

Since v1.7.0

如果安装了 dcat/laravel-wherehasin,则会优先使用whereHasIn方法进行查询操作

$grid->column('user.name')->filter(
    Grid\Column\Filter\Equal::make()
);

$grid->column('user_name')->filter(
    Grid\Column\Filter\Equal::make()->setColumnName('user.name')
);

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
发起讨论 只看当前版本


暂无话题~