牛骨文教育服务平台(让学习变的简单)

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();

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