[TOC] #### 1. 构建搜索器参数 --- ``` /** * 模型搜索器参数构造函数 * * @param array $keys * @param array $where */ function where_filter(&$keys, array $where) { // 去掉数组里的空字符串和null $where = array_filter($where, function ($k) { return ($k === '' || $k === null) ? false : true; }); // 拿到所有键 $keys = array_keys($where); // 返回数组 return $where; } ``` #### 2. 根据时间范围筛选 --- ``` /** * 追加获取器 * * create_time_range 根据时间范围筛选 */ public function searchCreateTimeRangeAttr($query, $value) { $query->whereBetweenTime('create_time', ...explode(' - ', $value)); } ``` #### 3. 根据 nickname 字段模糊查询 --- ``` /** * 根据nickname字段模糊查询 * * @param [type] $query [description] * @param [type] $value [description] * @param [type] $data [description] */ public function searchNicknameAttr($query, $value, $data) { $value !== '' && $query->whereLike('nickname', '%' . $value . '%'); } ``` #### 4. hasWhere 根据关联条件来查询当前模型对象数据 --- **商家表** ```html mysql> select * from merch; +----+---------+-----------------+ | id | user_id | name | +----+---------+-----------------+ | 1 | 1 | 昊天宗 | | 2 | 2 | 七宝琉璃宗 | 2 rows in set (0.00 sec) ``` **用户表** ```html mysql> select * from user; +----+--------+-------+ | id | name | score | +----+--------+-------+ | 1 | 张三 | 30 | | 2 | 李四 | 20 | | 3 | 王五 | 50 | +----+--------+-------+ 3 rows in set (0.02 sec) ``` **应用场景: 在商家列表中根据用户昵称查询商家** ``` public function searchNameAttr($query, $value, $data) { $query->hasWhere('user', function ($query) use ($value) { $query->whereLike('name', '%' . $value . '%'); }); } ```