> 搜索器用于封裝查詢條件表達式,必須在模型中定義,只有使用模型操作數(shù)據(jù)時才能用搜索器。調(diào)用搜索器時使用的是數(shù)據(jù)表字段,可以不用定義搜索器方法,默認是 = 條件;如果不是數(shù)據(jù)表字段,必須定義對應的搜索器方法。 #### 1. 調(diào)用搜索器 --- **直接調(diào)用,默認查詢條件是 `=`** ```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. 搜索器方法的三個參數(shù) `searchNameAttr($query, $value, $data)` --- + $query: `think\db\Query` 對象,用于鏈接操作 + $value:withSearch() 第二個參數(shù)中當前搜索器字段對應的值 + $data:withSearch() 第二個參數(shù)的值 可以直接在搜索器方法中打印參數(shù),看看到底是個啥 ```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 . '%'); } } ``` ![](https://img.itqaq.com/art/content/a7c49756060d5cf331c3102a790e8f3f.png)