• 技术文章 >php框架 >Laravel

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

    藏色散人藏色散人2021-04-08 08:42:09转载135
    下面由laravel教程栏目给大家介绍《laravel查询不在需要写大量ifelse判断了,只需要配置一下即可 》,希望对需要的朋友有所帮助!

    背景

    公司主要业务使用是的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视频教程

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

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:laravel
    上一篇:50道面试官必问的Laravel面试题【附答案】 下一篇:详解Laravel之模型关联预加载
    第15期线上培训班

    相关文章推荐

    • 详解Laravel路由之domain解决多域名问题• 总结Homestead中使用laravel-mix问题• Laravel怎么自定义webpack.mix.js• 总结laravel中$request获取请求信息用法• 50道面试官必问的Laravel面试题【附答案】

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网