- 前言
注:本文假設你使用了 Repository ( BaseRepository)
我們在使用搜尋的時候,可能會有以下需求:
- 資料庫欄位不被暴露出來
- 搜尋的程式碼儘可能公用化
ok,我們來一起實現吧
-
在
Model
裡定義一個public
變數public $searchField =[ 'username' => 'name', 'type' => 'user_type', 'game_id' => 'game_type_id', 'status' => 'user_status', ]; //在這裡做欄位對映
這裡已經完成了欄位對映的相關操作,繼續
-
在
Repository
裡注入這個變數public function __construct(User $user) { $this->model = $user; $this->searchField = $user->searchField; }
此處之所以單獨將對映注入是因為:可能會有非公用查詢導致完整的物件例項變成Builder物件而導致無法取到對映欄位的情況。
-
在
BaseRepository
的paginate
方法裡增加以下程式碼$params = \Request::all(); $fields = isset($this->searchField) ? $this->searchField :[]; if (count($fields) > 0 ){ foreach ($params as $param => $value ) { if (array_has($fields , $param )){ $this->model = $this->model->where( array_get( $fields , $param ) , $value); } } }
在URL裡新增你對映的引數,試試看吧~
程式碼示例:程式碼片段
最後,希望你們能看的懂我在說什麼...(我自己都不知道我在幹什麼)
本作品採用《CC 協議》,轉載必須註明作者和本文連結