ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 在TP6.0中使用 `withSearch()` 方法调用搜索器 >[danger] 参数说明 + $field :索引数组,键值是字段名,限定使用的获取器 + $data:关联数组,['键名' => '获取器的第三个参数的值'] ``` withSearch(array $field, array $data) ``` >[danger] withSearch(array $field) 只传入一个参数 当调用搜索器是只传入一个参数时,无论是不是数据表的字段,都要自己添加对应的搜索器方法才有意义 >[danger] withSearch(array $field, array $data) 传入两个参数 + **如果指定的字段是数据表字段,默认条件是 `=`** withSearch 第一个参数指定了字段,第二个参数并且指定该字段对应的值,默认就会生成`等于该字段值的条件` ```php $data = UserModel::field('id,username') ->withSearch(['id'], [ 'id' => 123 ]) ->fetchSql(true) ->select(); ``` + **执行的SQL语句** ~~~sql SELECT `id`,`username` FROM `user` WHERE `id` = 123 ~~~ + **如果想改变默认的 `=` 关系,可以自己定义该字段对应的搜索器方法** ```php <?php namespace app\model; class User extends \think\Model { public function searchIdAttr($query, $value, $data) { $query->where('id', '>', $value); } } ``` >[danger] 如果搜索器指定的字段不是数据表字段 + **例如下面的 `abc` 字段** ```php $data = UserModel::field('id,username') ->withSearch(['id', 'abc'], [ 'id' => 123 ]) ->fetchSql(true) ->select(); ``` + **如果没有定义 `abc` 对应的搜索器方法,不会报错,但也没有任何意义** ``` public function searchAbcAttr($query, $value, $data) { $query->where('id', '<', $value); } ```