+ -

laravel查询不再需要写大量if else判断了!

时间:2021-04-22

来源:互联网

在手机上看
手机扫描阅读

今天PHP爱好者给大家带来下面由laravel教程栏目给大家介绍《laravel查询不在需要写大量ifelse判断了,只需要配置一下即可 》,希望对需要的朋友有所帮助!

laravel 查询不在需要写大量if else 判断了,只需要配置一下即可。

背景

公司主要业务使用是的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查询记录如下截图:

e392e07f1c354d894842ae15f3c1bca.png

提示:  
'in','not_in','between','not_between'这些标识符支持数组和字
符串,字符串可选 ','和'.'作为分隔符。

就是这样简单可以方便我们的代码变得优雅一些!

项目地址

Tip:laravel-query-builderp(https://github.com/zyimm/laravel-query-builder)

以上就是laravel查询不再需要写大量if else判断了!的详细内容,更多请关注php爱好者其它相关文章!

热门下载

更多