T-DOC
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • 入门

    • 简介
    • 安装
    • 1.x升级指南
    • 版本升级
    • 快速开始
    • 开发前必读
    • 主题与颜色
    • 静态资源
    • 视图与自定义页面
    • 多应用 (多后台)
    • JS组件
    • 常见问题
    • Laravel Octane
  • 数据表格

    • 基本使用
    • 列的使用和扩展
    • 列的显示和扩展
    • 行的使用和扩展
    • 工具栏
    • 树状表格
    • 组合表头
    • 数据来源以及查询条件
    • 关联关系
    • 查询过滤
    • 列过滤器
    • 快捷搜索
    • 规格筛选器
    • 数据导出
    • 快捷创建
    • 行内编辑
    • 事件
    • 字段翻译
    • 数据软删除
    • 头部和脚部
    • 异步渲染
  • 数据表单

    • 基本使用
    • 图片/文件上传
    • 字段的使用
    • 字段扩展
    • 数据源
    • 表单弹窗
    • 关联关系
    • JSON表单
    • 分步表单
    • 表单验证
    • 工具表单
    • 事件以及表单响应
    • 初始化
    • 表单布局
    • 字段翻译
    • 字段动态显示
  • 数据详情

    • 基本使用
    • 字段显示
    • 关联关系
    • 字段显示扩展
    • 初始化
    • 字段翻译
  • 模型树

    • 基本使用
  • 数据仓库

    • 基本使用
  • 动作

    • 基本使用
    • 数据表格
    • 数据表单
    • 数据详情
    • 模型树
  • 多语言

    • 基本使用
  • 开发扩展

    • 扩展基本使用
    • 开发扩展
  • 页面组件

    • 异步加载
    • 图表
    • 数据统计卡片
    • 模态窗 (Modal)
    • 工具表单
    • 下拉菜单
    • 单/复选框
    • 选项卡
    • 警告框
    • 提示窗
    • Markdown
    • 卡片
  • 区块 (section)

    • 区块基本使用
  • 动作以及表单响应

    • 动作以及表单响应
  • 权限控制

    • 权限控制
  • 菜单

    • 菜单基本使用
  • 帮助函数

    • 帮助函数
  • 开发工具

    • 基本使用
  • 自定义登陆认证

    • 自定义登录
  • 自定义头部导航

    • 自定义头部导航条
  • 更新日志

    • BETA版本更新日志
    • 更新日志

列过滤器

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

字符串比较查询

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')
);
Last Updated:
Contributors: Hans
Prev
查询过滤
Next
快捷搜索