背景
公司主要業務使用是的PHP 語言開發,用的laravel 框架,在做一些清單過濾查詢常常會出現如下很難維護的程式碼:
//若干代码 根据参数执行不同where if (request('has_score')) { $article = $article->with(['scores' => function ($query) { $query->where('type', self::TYPE); $query->with('user'); }]); } if (has_module('Audit')) { $article = $article->with(['auditing' => function ($query) { $query->orderBy('id', 'desc'); }]); } $article = $article->with(['videos' => function ($query) { $query->where('type', VIDEO); }])->with(['audios' => function ($query) { $ query->where('type', AUDIO); }]);
解決
如果可以將這些查詢進行配置起來,根據配置來查詢數據,而不是在程式碼中直接通過if來判斷,這樣程式碼會優雅一些。我自己開發一個服務包laravel-query-builder。
laravel-query-builder 是laravel框架根據已有配置來執行查詢條件建構器服務套件
Install
composer require zyimm/laravelquery-builder
Require
{ "require": { "php": ">=7.0", "fideloper/proxy": "^4.0", "laravel/framework": ">=5.5" } }
Usage
/** // 目前支持条件操作符 '=', '', '>', '>=', ' 20, 'user_id'=> 'zyimm', 'user_name' => "zyimm,12" ]; //配置数据库字段查询操作 $condition =[ '=' => [ 'log_id' ], 'not_in' => [ 'user_id' ], 'between' => [ 'user_name' ], 'full_like' => [ 'user_id' ], '' => [ 'user_id' ], '>' => [ 'user_id' ] ]; DB::enableQueryLog(); //model \App\Models\Log::query() ->where(function ($query) use ($build, $data, $condition){ $build->buildQueryWhere($data ,$condition, $query); })->get(); dd(DB::getQueryLog());
產生SQL查詢記錄如下截圖:
#提示: 'in','not_in','between' ,'not_between'
這些識別碼支援數組和字
符號字串,字串可選','和'.'作為分隔符號。
就是這樣簡單可以方便我們的程式碼變得優雅一些!
專案地址
Tip:laravel-query-builderp(https://github.com/zyimm/laravel-query-builder)
#相關建議:最新的五個Laravel影片教學