> 搜索器用于封装字段的查询条件表达式,一个搜索器对应一个特殊的方法 #### 1. 搜索器方法命名规范 --- + a. 必须是 `public` 访问类型 + b. 方法名为:search`FieldName`Attr `FieldName`为数据表字段名的小驼峰转换 #### 2. 模型查询调用获取器(数据库查询无法使用) --- **withSearch()** + 第一参数为索引数组:指定调用的获取器 + 第二参数为关联数组:搜索条件(字段对应的值) ```php $data = User::order('id asc') ->withSearch(['username', 'email', 'gender'], [ 'username' => input('get.username', '', 'trim'), 'email' => input('get.email', '', 'trim'), 'gender' => input('get.gender', '', 'trim'), ]) ->paginate([ 'list_rows' => 10, 'query' => input('get.'), ]); ``` **默认查询条件是 `=`, 上面查询条件相当于以下条件** ``` where([ 'username' => input('get.username', '', 'trim'), 'email' => input('get.email', '', 'trim'), 'gender' => input('get.gender', '', 'trim'), ]) ``` **可通过定义搜索器方法改变默认的 `=` 条件** ```php <?php namespace app\model; use think\Model; class User extends Model { ####### 搜索器 ####### public function searchUsernameAttr($query, $value, $data) { if ($value != '') { $query->whereLike('username', '%' . $value . '%'); } } } ```