Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
imi
imi
提交
cc9ab994
imi
项目概览
imi
/
imi
9 个月 前同步成功
通知
53
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
imi
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
cc9ab994
编写于
7月 02, 2021
作者:
weixin_47267244
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复查询构建器别名功能下的绑定参数问题
上级
e049a5e5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
193 addition
and
23 deletion
+193
-23
src/Db/Query/Query.php
src/Db/Query/Query.php
+193
-23
未找到文件。
src/Db/Query/Query.php
浏览文件 @
cc9ab994
...
@@ -115,11 +115,11 @@ class Query implements IQuery
...
@@ -115,11 +115,11 @@ class Query implements IQuery
protected
$resultClass
=
Result
::
class
;
protected
$resultClass
=
Result
::
class
;
/**
/**
* 别名 Sql 集合.
* 别名 Sql
数据
集合.
*
*
* @var
string[]
* @var
array
*/
*/
protected
static
$aliasSql
s
=
[];
protected
static
$aliasSql
Map
=
[];
/**
/**
* @param \Imi\Db\Interfaces\IDb|null $db
* @param \Imi\Db\Interfaces\IDb|null $db
...
@@ -1043,15 +1043,51 @@ class Query implements IQuery
...
@@ -1043,15 +1043,51 @@ class Query implements IQuery
public
function
select
():
IResult
public
function
select
():
IResult
{
{
$alias
=
$this
->
alias
;
$alias
=
$this
->
alias
;
$aliasSql
s
=
&
static
::
$aliasSqls
;
$aliasSql
Map
=
&
static
::
$aliasSqlMap
;
if
(
$alias
&&
isset
(
$aliasSql
s
[
$alias
]))
if
(
$alias
&&
isset
(
$aliasSql
Map
[
$alias
]))
{
{
$sql
=
$aliasSqls
[
$alias
];
$aliasSqlData
=
$aliasSqlMap
[
$alias
];
$sql
=
$aliasSqlData
[
'sql'
];
$binds
=
$aliasSqlData
[
'binds'
];
if
(
$binds
)
{
if
(
$this
->
binds
)
{
$this
->
binds
=
array_merge
(
$binds
,
$this
->
binds
);
}
else
{
$this
->
binds
=
$binds
;
}
}
}
}
else
else
{
{
if
(
$alias
)
{
$binds
=
$this
->
binds
;
$this
->
binds
=
[];
}
$builder
=
new
SelectBuilder
(
$this
);
$builder
=
new
SelectBuilder
(
$this
);
$aliasSqls
[
$alias
]
=
$sql
=
$builder
->
build
();
$sql
=
$builder
->
build
();
if
(
$alias
)
{
// @phpstan-ignore-next-line
$originBinds
=
$binds
;
$binds
=
$this
->
binds
;
if
(
$binds
)
{
$this
->
binds
=
array_merge
(
$originBinds
,
$binds
);
}
else
{
$this
->
binds
=
$originBinds
;
}
$aliasSqlMap
[
$alias
]
=
[
'sql'
=>
$sql
,
'binds'
=>
$binds
,
];
}
}
}
if
(
!
$this
->
isInitQueryType
&&
!
$this
->
isInTransaction
())
if
(
!
$this
->
isInitQueryType
&&
!
$this
->
isInTransaction
())
{
{
...
@@ -1097,10 +1133,23 @@ class Query implements IQuery
...
@@ -1097,10 +1133,23 @@ class Query implements IQuery
public
function
insert
(
$data
=
null
):
IResult
public
function
insert
(
$data
=
null
):
IResult
{
{
$alias
=
$this
->
alias
;
$alias
=
$this
->
alias
;
$aliasSql
s
=
&
static
::
$aliasSqls
;
$aliasSql
Map
=
&
static
::
$aliasSqlMap
;
if
(
$alias
&&
isset
(
$aliasSql
s
[
$alias
]))
if
(
$alias
&&
isset
(
$aliasSql
Map
[
$alias
]))
{
{
$sql
=
$aliasSqls
[
$alias
];
$aliasSqlData
=
$aliasSqlMap
[
$alias
];
$sql
=
$aliasSqlData
[
'sql'
];
$binds
=
$aliasSqlData
[
'binds'
];
if
(
$binds
)
{
if
(
$this
->
binds
)
{
$this
->
binds
=
array_merge
(
$binds
,
$this
->
binds
);
}
else
{
$this
->
binds
=
$binds
;
}
}
$bindValues
=
[];
$bindValues
=
[];
$numberKey
=
isset
(
$data
[
0
]);
$numberKey
=
isset
(
$data
[
0
]);
foreach
(
$data
as
$k
=>
$v
)
foreach
(
$data
as
$k
=>
$v
)
...
@@ -1118,8 +1167,21 @@ class Query implements IQuery
...
@@ -1118,8 +1167,21 @@ class Query implements IQuery
}
}
else
else
{
{
if
(
$alias
)
{
$binds
=
$this
->
binds
;
$this
->
binds
=
[];
}
$builder
=
new
InsertBuilder
(
$this
);
$builder
=
new
InsertBuilder
(
$this
);
$aliasSqls
[
$alias
]
=
$sql
=
$builder
->
build
(
$data
);
$sql
=
$builder
->
build
(
$data
);
if
(
$alias
)
{
$aliasSqlMap
[
$alias
]
=
[
'sql'
=>
$sql
,
// @phpstan-ignore-next-line
'binds'
=>
$binds
,
];
}
}
}
return
$this
->
execute
(
$sql
);
return
$this
->
execute
(
$sql
);
...
@@ -1151,10 +1213,23 @@ class Query implements IQuery
...
@@ -1151,10 +1213,23 @@ class Query implements IQuery
public
function
update
(
$data
=
null
):
IResult
public
function
update
(
$data
=
null
):
IResult
{
{
$alias
=
$this
->
alias
;
$alias
=
$this
->
alias
;
$aliasSql
s
=
&
static
::
$aliasSqls
;
$aliasSql
Map
=
&
static
::
$aliasSqlMap
;
if
(
$alias
&&
isset
(
$aliasSql
s
[
$alias
]))
if
(
$alias
&&
isset
(
$aliasSql
Map
[
$alias
]))
{
{
$sql
=
$aliasSqls
[
$alias
];
$aliasSqlData
=
$aliasSqlMap
[
$alias
];
$sql
=
$aliasSqlData
[
'sql'
];
$binds
=
$aliasSqlData
[
'binds'
];
if
(
$binds
)
{
if
(
$this
->
binds
)
{
$this
->
binds
=
array_merge
(
$binds
,
$this
->
binds
);
}
else
{
$this
->
binds
=
$binds
;
}
}
$bindValues
=
[];
$bindValues
=
[];
foreach
(
$data
as
$k
=>
$v
)
foreach
(
$data
as
$k
=>
$v
)
{
{
...
@@ -1164,8 +1239,31 @@ class Query implements IQuery
...
@@ -1164,8 +1239,31 @@ class Query implements IQuery
}
}
else
else
{
{
if
(
$alias
)
{
$binds
=
$this
->
binds
;
$this
->
binds
=
[];
}
$builder
=
new
UpdateBuilder
(
$this
);
$builder
=
new
UpdateBuilder
(
$this
);
$aliasSqls
[
$alias
]
=
$sql
=
$builder
->
build
(
$data
);
$sql
=
$builder
->
build
(
$data
);
if
(
$alias
)
{
// @phpstan-ignore-next-line
$originBinds
=
$binds
;
$binds
=
$this
->
binds
;
if
(
$binds
)
{
$this
->
binds
=
array_merge
(
$originBinds
,
$binds
);
}
else
{
$this
->
binds
=
$originBinds
;
}
$aliasSqlMap
[
$alias
]
=
[
'sql'
=>
$sql
,
'binds'
=>
$binds
,
];
}
}
}
return
$this
->
execute
(
$sql
);
return
$this
->
execute
(
$sql
);
...
@@ -1181,10 +1279,23 @@ class Query implements IQuery
...
@@ -1181,10 +1279,23 @@ class Query implements IQuery
public
function
replace
(
$data
=
null
):
IResult
public
function
replace
(
$data
=
null
):
IResult
{
{
$alias
=
$this
->
alias
;
$alias
=
$this
->
alias
;
$aliasSql
s
=
&
static
::
$aliasSqls
;
$aliasSql
Map
=
&
static
::
$aliasSqlMap
;
if
(
$alias
&&
isset
(
$aliasSql
s
[
$alias
]))
if
(
$alias
&&
isset
(
$aliasSql
Map
[
$alias
]))
{
{
$sql
=
$aliasSqls
[
$alias
];
$aliasSqlData
=
$aliasSqlMap
[
$alias
];
$sql
=
$aliasSqlData
[
'sql'
];
$binds
=
$aliasSqlData
[
'binds'
];
if
(
$binds
)
{
if
(
$this
->
binds
)
{
$this
->
binds
=
array_merge
(
$binds
,
$this
->
binds
);
}
else
{
$this
->
binds
=
$binds
;
}
}
$bindValues
=
[];
$bindValues
=
[];
foreach
(
$data
as
$k
=>
$v
)
foreach
(
$data
as
$k
=>
$v
)
{
{
...
@@ -1194,8 +1305,31 @@ class Query implements IQuery
...
@@ -1194,8 +1305,31 @@ class Query implements IQuery
}
}
else
else
{
{
if
(
$alias
)
{
$binds
=
$this
->
binds
;
$this
->
binds
=
[];
}
$builder
=
new
ReplaceBuilder
(
$this
);
$builder
=
new
ReplaceBuilder
(
$this
);
$aliasSqls
[
$alias
]
=
$sql
=
$builder
->
build
(
$data
);
$sql
=
$builder
->
build
(
$data
);
if
(
$alias
)
{
// @phpstan-ignore-next-line
$originBinds
=
$binds
;
$binds
=
$this
->
binds
;
if
(
$binds
)
{
$this
->
binds
=
array_merge
(
$originBinds
,
$binds
);
}
else
{
$this
->
binds
=
$originBinds
;
}
$aliasSqlMap
[
$alias
]
=
[
'sql'
=>
$sql
,
'binds'
=>
$binds
,
];
}
}
}
return
$this
->
execute
(
$sql
);
return
$this
->
execute
(
$sql
);
...
@@ -1209,15 +1343,51 @@ class Query implements IQuery
...
@@ -1209,15 +1343,51 @@ class Query implements IQuery
public
function
delete
():
IResult
public
function
delete
():
IResult
{
{
$alias
=
$this
->
alias
;
$alias
=
$this
->
alias
;
$aliasSql
s
=
&
static
::
$aliasSqls
;
$aliasSql
Map
=
&
static
::
$aliasSqlMap
;
if
(
$alias
&&
isset
(
$aliasSql
s
[
$alias
]))
if
(
$alias
&&
isset
(
$aliasSql
Map
[
$alias
]))
{
{
$sql
=
$aliasSqls
[
$alias
];
$aliasSqlData
=
$aliasSqlMap
[
$alias
];
$sql
=
$aliasSqlData
[
'sql'
];
$binds
=
$aliasSqlData
[
'binds'
];
if
(
$binds
)
{
if
(
$this
->
binds
)
{
$this
->
binds
=
array_merge
(
$binds
,
$this
->
binds
);
}
else
{
$this
->
binds
=
$binds
;
}
}
}
}
else
else
{
{
if
(
$alias
)
{
$binds
=
$this
->
binds
;
$this
->
binds
=
[];
}
$builder
=
new
DeleteBuilder
(
$this
);
$builder
=
new
DeleteBuilder
(
$this
);
$aliasSqls
[
$alias
]
=
$sql
=
$builder
->
build
();
$sql
=
$builder
->
build
();
if
(
$alias
)
{
// @phpstan-ignore-next-line
$originBinds
=
$binds
;
$binds
=
$this
->
binds
;
if
(
$binds
)
{
$this
->
binds
=
array_merge
(
$originBinds
,
$binds
);
}
else
{
$this
->
binds
=
$originBinds
;
}
$aliasSqlMap
[
$alias
]
=
[
'sql'
=>
$sql
,
'binds'
=>
$binds
,
];
}
}
}
$result
=
$this
->
execute
(
$sql
);
$result
=
$this
->
execute
(
$sql
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录