背景
公司主要业务使用是的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
/**// 目前支持条件操作符 '=', '<>', '>', '>=', '<', '<=', 'like', 'full_like', 'in', 'not_in', 'between', 'not_between'**/use Illuminate\Support\Facades\DB;use zyimm\query\build\QueryWhere;/** * @var QueryWhere $build */$build = app('QueryWhere');//提交过来数据$data = [ 'log_id' => 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视频教程
以上就是laravel查询不再需要写大量if else判断了!的知识。速戳>>知识兔学习精品课!