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

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

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

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

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

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

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

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

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

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

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

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

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

或者这样

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

与其他筛选字段联动

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

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

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

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

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

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