Laravel是一個優雅的框架,但並不表明你寫的業務代碼也一樣優雅。
你的代碼中是否還存在以下相似代碼:html
//是否綁定 if (isset($param['bind']) and $param['bind'] != '-1') { $t = $param['bind'] == 1 ? '!=' : '='; $rs = $rs->where('user_id', $t, 0); } //是否激活 if (isset($param['active_time']) and $param['active_time'] != '-1') { $t = $param['active_time'] == 1 ? '>=' : '<'; $rs = $rs->where('active_time', $t, '1999-01-01'); } if (isset($param['dealer']) && !empty($param['dealer'])) { $rs = $rs->whereHas('dealer', function ($query) use ($param) { $query->where('name', 'like', '%'.$param['dealer'] . '%') ->orWhere('dealer_id', '=', $param['dealer']); }); }
當業務需求要加多個查詢條件的時候,每每須要改前端頁面和後端頁面,前端加input框,後端加if條件。前端
本文分享下l5-repository(原做者) / l5-repository(本文做者改後)插件,ps:雖然目前原做者已不維護了,不過貌似招了些自願者去維護,不影響基本使用。這裏提到了兩個l5插件,主要介紹下後者,改動的部分能夠很好支持此插件。jquery
此插件實現了repository層,業務邏輯相關的代碼放在repository中實現,全部的repository繼承公共repository,公共repository繼承\Prettus\Repository\Eloquent\BaseRepository
,repository模式不瞭解的點這裏。laravel
控制器方面只需簡單的2行便可,插件會解析請求參數,可是解析的是特定形式的查詢參數,如: /users?search=user_name:133;created_at:2018-01-01,2018-01-17&searchFields=user_name:like;created_at:between
。git
public function index(Request $request) { $this->userRepository->pushCriteria(new RequestCriteria($request)); $users= $this->userRepository->paginate(); }
視圖方面原做者只是舉了幾個例子,並沒提供相關js去拼成後端識別的格式,因此想依靠控制器兩行代碼簡化查詢還得作些工做,本文做者不忍心這插件因爲這點瑕疵而棄用,因而本身fork了個而後寫了一坨jquery去支持它。因而,視圖代碼以下便可:github
{{-- 搜索本表的user_name字段 data-search-type="like":模糊搜索 --}} <input data-search-type="like" name="user_name" type="text"> {{-- 搜索關聯表的聯繫電話字段 --}} <input data-search-type="like" name="userAddress.tel" type="text"> {{-- 建立區間查詢 created_at between '2018-01-01' and '2018-01-17' --}} <input data-search-type=">=" data-is-between="1" name="created_at" type="text"> <input data-search-type="<=" data-is-between="1" name="created_at" type="text">
寫的那段jquery即可自動將表單參數拼成l5-repositoy識別的格式,後續加新的篩選條件只要前端加input便可。後端
第一次分享技術文,有寫的不到位的地方歡迎指出,謝謝~框架