Background
회사의 주요 사업은 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); }]);
로그인 후 복사
Solution
이 쿼리가 가능하다면 configure 코드에서 직접 판단하는 대신 구성에 따라 데이터를 쿼리하여 코드를 더욱 우아하게 만듭니다. 저는 서비스 패키지 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'
이러한 식별자는 배열과 문자열을 지원하며 문자열은 선택적으로 ',' 및 '.'을 구분 기호로 사용할 수 있습니다.
최근 5개의 Laravel 비디오 튜토리얼