添加表头筛选条件

addFilterMap('字段名' [, '查询条件'])

点击筛选图标时,系统会去获取该字段的所有数据,默认是没有添加任何筛选条件的,如果想在获取字段数据的时加上查询条件,可以这样做。

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addFilter('id,username') // 添加筛选
  4. ->addFilterMap('id', ['group' => 'cms']) // 只获取group等于cms的id字段信息
  5. ->fetch();

也可以使用>、<、eq、gt、egt等关键字,和ThinkPHP的用法一致

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addFilter('id,username') // 添加筛选
  4. ->addFilterMap('id', ['status' => ['>=', 10]]) // 只获取status大于等于10的id字段
  5. ->fetch();

如果多个字段的限定条件是相同的,也可以写在一起,字段之间用逗号隔开

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addFilter('id,username') // 添加筛选
  4. ->addFilterMap('id,username', ['status' => ['>=', 10]]) // 只获取status大于等于10的id字段
  5. ->fetch();

如果所有字段都需要用到相同的限定条件,那么可以干脆把条件写到addFilter方法的第二个参数,不用添加addFilterMap方法。

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addFilter('id,username', ['status' => ['>=', 10]]) // 添加筛选并限定条件
  4. ->fetch();

如果某字段的限定条件已经定义过,想对该字段额外增加条件也可以,比如上面的例子,我希望获取username字段信息的时候,不仅要group等于cms,还要求status大于0,只需接着对该字段添加限定条件。

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addFilter('id,username') // 添加筛选
  4. ->addFilterMap('id,username', ['group' => 'cms'])
  5. ->addFilterMap('username', ['status' => ['>', 0]])
  6. ->fetch();

除此之外,也可以把条件都定义好,直接以数组形式传入,以上的代码和下面的效果是相同的。

  1. $filter_map = [
  2. 'id,username' => ['group' => 'cms'],
  3. 'username' => ['status' => ['>', 0]]
  4. ];
  5. // 使用ZBuilder构建数据表格
  6. return ZBuilder::make('table')
  7. ->addFilter('id,username') // 添加筛选
  8. ->addFilterMap($filter_map)
  9. ->fetch();

或者这样

  1. $filter_map = [
  2. 'id' => ['group' => 'cms'],
  3. 'username' => ['group' => 'cms', 'status' => ['>', 0]]
  4. ];
  5. // 使用ZBuilder构建数据表格
  6. return ZBuilder::make('table')
  7. ->addFilter('id,username') // 添加筛选
  8. ->addFilterMap($filter_map)
  9. ->fetch();

与其他筛选字段联动

从1.0.3版本开始,当addFilterMap的第二个参数是字符串时,表示与其他字段筛选进行联动

比如,我们添加了省份筛选和城市筛选,一般是这样写的

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addFilter('province', $list_province) // $list_province 是用于将省份id转为省份名称
  4. ->addFilter('city', $list_city) // $list_city 是用于将城市id转为城市名称
  5. ->fetch();

但是我们假如想实现当用户筛选“广东”省时,点击城市筛选只会出现属于广东省的城市列表,那么我们可以这么写

  1. // 使用ZBuilder构建数据表格
  2. return ZBuilder::make('table')
  3. ->addFilter('province', $list_province) // $list_province 是用于将省份id转为省份名称
  4. ->addFilter('city', $list_city) // $list_city 是用于将城市id转为城市名称
  5. ->addFilterMap('city', 'province')
  6. ->fetch();

当用户点击筛选城市时,框架会把当前选择的省份一起传到服务器进行查询。