scaleplan / sql-templater
此包的最新版本(1.0.0)没有可用的许可信息。
PostgreSQL的查询模板器
1.0.0
2019-12-30 09:02 UTC
Requires
- php: >=7.0
This package is auto-updated.
Last update: 2024-09-16 19:23:50 UTC
README
SQL模板辅助类。
安装
composer require scaleplan/sql-templater
描述
包含几个预定义的指令,可以包含在SQL查询中以简化操作
- ####[fields]
在SQL查询的这一部分插入输入的数据键字符串,例如,如果我们有一个查询
INSERT INTO
user
([fields])
VALUES
...
和数据
$data = [
'name' = > 'Ivan'
'surname' = > 'Fuckov'
];
经过处理后,请求将采取以下形式
INSERT INTO
user
(name,
surname)
VALUES
...
如果我们不知道确切的数据集将到达入口,这将很有用。
操作类似于 [fields] + 在 : not(...) (而不是点)中可以指定非包含字段的逗号分隔列表,例如
INSERT INTO
user
([fields:not (sur)])
VALUES
...
转换为
INSERT INTO
user
(name)
VALUES
...
使用相同的数据。
- ####[expression]
类似于 [fields],仅填充查询的另一部分,例如
请求
INSERT INTO
user
([fields])
VALUES
[expression]
和数据
$data = [
'name' = > 'Ivan'
'surname' = > 'Fuckov'
];
结果将是
INSERT INTO
user
(name,
surname)
VALUES
(:name,
: surname)
如果输入有多个行
$data = [
[
'name' = > 'Ivan'
'surname' = > 'Fuckov'
],
[
'name' = > 'Vasiliy'
'surname' = > 'Chekhov'
]
];
结果将是
INSERT INTO
user
(name,
surname)
VALUES
(: name0,
: surname0),
(: name1,
: surname1)
数据看起来像
$data = [
'name0' = > 'Ivan'
'surname0' = > 'Fuckov'
'name1' = > 'Vasiliy'
'surname1' = > 'Chekhov'
];
我认为这里一切都清楚 - 占位符的替换 - 除了那些在 not(...) 中的以外
应该注意的是,如果参数值中包含数组,它也可以正确处理
请求
INSERT INTO
user
([fields])
VALUES
[expression]
特征
$data = [
'name' = > 'Ivan'
'surname' = > 'Fuckov',
'phone_numbers' => [
'+7905555555',
'+7904444444'
]
];
结果
INSERT INTO
user
(name,
surname)
VALUES
(:name,
: surname,
ARRAY [: phone_numbers0, phone_numbers1])
可以通过传递模板参数 $convertArrays 并将值设置为 false 来禁用此转换。
此外,还可以使用查询的可选部分,这些部分仅在它们中使用了参数时使用,例如
SELECT
*
FROM
user
[WHERE
group =: group]
如果数据已传输
$data = [
'group' = > 'admins'
];
则生成的查询将是
SELECT
*
FROM
user
WHERE
group =: group
如果传递了 group 参数,则条件将完全删除,查询将返回所有用户。