一.模型搜索器
1. 搜索器是用於封裝字段(或搜索標識)的查詢表達式;
2. 一個搜索器對應模型的一個特殊方法,該方法爲 public;
3. 方法名的命名規範爲:searchFieldNameAttr();
4. 舉個例子,我們要封裝一個郵箱字符模糊查詢,然後封裝一個時間限定查詢;
5.FieldName
爲數據表字段的駝峯轉換,搜索器僅在調用withSearch
方法的時候觸發;
在 User 模型端,我創建兩個對外的方法,如下:
// 定義搜索器 public function searchBnameAttr($query,$value){ //創建搜索規則 $query->where('bname','like',$value.'%'); }
在控制端使用withSearch()
public function show(){ // 使用搜索器過濾顯示,withSearch兩個參數必須爲數組 $user=UserModel::withSearch(['bname'],['bname'=>'王'])->select(); return json($user); }
如果搜索器需要過濾兩個字段bname u_time,那需要在模型中創建兩個搜索器 searchBname() searchU_time(),
控制器在調用withSearch(['bname','u_time'],['bname=>'du','u_time'=>['2021-10','2021-11']]);
6.如果你想在搜索器添加一個可以排序的功能,具體如下:
public function searchEmailAttr($query, $value, $data) { $query->where('email', 'like', $value.'%'); if (isset($data['sort'])) { $query->order($data['sort']); } }
7.搜索器的第三個參數$data,可以得到 withSearch()方法第二參數的值;
8. 字段也可以設置別名:'create_time'=>'ctime'