Skip to content

Commit 870b84a

Browse files
author
zhouyangyang
committed
sync github
1 parent 5828da5 commit 870b84a

9 files changed

+667
-222
lines changed

.gitignore

+12-21
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
1-
/vendor/
2-
node_modules/
3-
npm-debug.log
4-
yarn-error.log
5-
6-
# Laravel 4 specific
7-
bootstrap/compiled.php
8-
app/storage/
9-
10-
# Laravel 5 & Lumen specific
11-
public/storage
12-
public/hot
13-
14-
# Laravel 5 & Lumen specific with changed public path
15-
public_html/storage
16-
public_html/hot
17-
18-
storage/*.key
1+
/node_modules
2+
/public/hot
3+
/public/storage
4+
/storage/*.key
5+
vendor
196
.env
20-
Homestead.yaml
21-
Homestead.json
22-
/.vagrant
7+
.env.backup
238
.phpunit.result.cache
9+
Homestead.json
10+
Homestead.yaml
11+
npm-debug.log
12+
yarn-error.log
13+
composer.lock
14+
.idea

LICENSE

+201-201
Large diffs are not rendered by default.

README.md

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
## laravel-query-builder
2+
3+
> laravel-query-builder 是laravel框架根据已有配置来执行查询条件构造器服务包|Query condition builder service package of laravel framework
4+
5+
## Install
6+
```
7+
composer require zyimm/laravelquery-builder
8+
```
9+
10+
## Usage
11+
```php
12+
// 目前支持条件操作符
13+
'=',
14+
'<>',
15+
'>',
16+
'>=',
17+
'<',
18+
'<=',
19+
'like',
20+
'full_like',
21+
'in',
22+
'not_in',
23+
'between',
24+
'not_between'
25+
<?php
26+
use Illuminate\Support\Facades\DB;
27+
use zyimm\query\build\QueryWhere;
28+
/**
29+
* @var QueryWhere $build
30+
*/
31+
$build = app('QueryWhere');
32+
//提交过来数据
33+
$data = [
34+
'log_id' => 20,
35+
'user_id'=> 'zyimm',
36+
'user_name' => "zyimm,12"
37+
];
38+
//配置数据库字段查询操作
39+
$condition =[
40+
'=' => [
41+
'log_id'
42+
],
43+
'not_in' => [
44+
'user_id'
45+
],
46+
'between' => [
47+
'user_name'
48+
],
49+
'full_like' => [
50+
'user_id'
51+
],
52+
'<>' => [
53+
'user_id'
54+
],
55+
'>' => [
56+
'user_id'
57+
]
58+
];
59+
DB::enableQueryLog();
60+
//model
61+
\App\Models\Log::query()
62+
->where(function ($query) use ($build, $data, $condition){
63+
$build->buildQueryWhere($data ,$condition, $query);
64+
})->get();
65+
dd(DB::getQueryLog());
66+
?>
67+
```
68+
生成SQL查询记录如下截图:
69+
![生成SQL查询记录](http://115.159.5.87/images/laravel-query-builder.jpg)
70+
提示:
71+
'in','not_in','between','not_between'标识符支持数组和字符串,字符串可选 ','和'.'作为分隔符。
72+
73+
## issue
74+
75+
能力有限!欢迎提出issue,共同学习进步。

composer.json

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"name": "zyimm/laravelquery-builder",
3+
"description": "laravel 框架查询条件构造器服务包|Query condition builder service package of laravel framework",
4+
"type": "library",
5+
"minimum-stability": "dev",
6+
"require": {
7+
"php": ">=7.0",
8+
"fideloper/proxy": "^4.0",
9+
"laravel/framework": ">=5.5"
10+
},
11+
"require-dev": {
12+
"barryvdh/laravel-debugbar": "^3.0.0"
13+
},
14+
"autoload": {
15+
"psr-4": {
16+
"zyimm\\query\\": "src"
17+
}
18+
},
19+
"autoload-dev": {
20+
"psr-4": {
21+
"zyimm\\query\\": "tests"
22+
}
23+
},
24+
"extra": {
25+
"laravel": {
26+
"providers": [
27+
"zyimm\\query\\QueryBuilderServiceProvider"
28+
]
29+
}
30+
},
31+
"repositories": [
32+
{
33+
"type": "composer",
34+
"url": "https://mirrors.aliyun.com/composer/"
35+
}
36+
]
37+
}

src/QueryBuilderServiceProvider.php

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
4+
namespace zyimm\query;
5+
6+
7+
use Illuminate\Support\ServiceProvider;
8+
use zyimm\query\build\QueryWhere;
9+
10+
class QueryBuilderServiceProvider extends ServiceProvider
11+
{
12+
/**
13+
* Perform post-registration booting of services.
14+
*
15+
* @return void
16+
*/
17+
public function boot()
18+
{
19+
20+
}
21+
22+
/**
23+
* Register any package services.
24+
*
25+
* @return void
26+
*/
27+
public function register()
28+
{
29+
$this->app->bind('QueryWhere', QueryWhere::class);
30+
}
31+
32+
}

src/build/QueryWhere.php

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace zyimm\query\build;
4+
5+
use Illuminate\Database\Eloquent\Builder;
6+
use zyimm\query\build\resolves\QueryBuilder;
7+
8+
/**
9+
* Class QueryWhere
10+
*
11+
* @package zyimm\query
12+
*/
13+
class QueryWhere
14+
{
15+
16+
/**
17+
* 查询构造器
18+
*
19+
* @param $params
20+
* @param $condition
21+
* @param $query
22+
*/
23+
public function buildQueryWhere($params, $condition, &$query)
24+
{
25+
$where = (new QueryBuilder($condition, $params))->build();
26+
//自动执行闭包查询
27+
$this->executeQuery($where, $query);
28+
}
29+
30+
/**
31+
* Execute closure query
32+
*
33+
* @param $where
34+
* @param $query Builder
35+
*/
36+
private function executeQuery($where, &$query)
37+
{
38+
foreach ($where as $extra) {
39+
if (stripos($extra[1],'.') !== false) {
40+
$operator = explode('.', $extra[1]);
41+
$extra[1] = reset($operator);
42+
$operator = array_pop($operator);
43+
} else {
44+
$operator = $extra[1];
45+
unset($extra[1]);
46+
}
47+
call_user_func_array([$query, $operator], $extra);
48+
}
49+
}
50+
}

0 commit comments

Comments
 (0)