> 搜索器用于封装查询条件表达式,必须在模型中定义,只有使用模型操作数据时才能用搜索器。调用搜索器时使用的是数据表字段,可以不用定义搜索器方法,默认是 = 条件;如果不是数据表字段,必须定义对应的搜索器方法。 #### 1. 调用搜索器 --- **直接调用,默认查询条件是 `=`** ```php UserModel::withSearch(['name'], ['name' => '张三']) ->fetchSql(true) ->select(); ``` ``` SELECT * FROM `user` WHERE `name` = '张三' ``` **在模型中自定义搜索器方法,改变默认的 `=`** ```php <?php namespace app\index\model; class User extends \think\Model { public function searchNameAttr($query, $value, $data) { $query->where('name','like', $value . '%'); } } ``` ```php UserModel::withSearch(['name'], ['name' => '张三']) ->fetchSql(true) ->select(); ``` ``` SELECT * FROM `user` WHERE `name` LIKE '张三%' ``` #### 2. 搜索器方法的三个参数 `searchNameAttr($query, $value, $data)` --- + $query: `think\db\Query` 对象,用于链接操作 + $value:withSearch() 第二个参数中当前搜索器字段对应的值 + $data:withSearch() 第二个参数的值 可以直接在搜索器方法中打印参数,看看到底是个啥 ```php <?php namespace app\index\model; class User extends \think\Model { public function searchNameAttr($query, $value, $data) { halt($query, $value, $data); $query->where('name','like', $value . '%'); } } ``` 