类 QueryExpression
表示一个 SQL 查询表达式。在内部,它存储一个表达式树,可以通过将此对象转换为字符串来编译,并将包含一个正确带括号和嵌套的表达式。
属性摘要
-
$_conditions protected
数组
表示表达式树“分支”的字符串或其他表达式对象的列表。例如,数组的一个键可能看起来像“sum > :value”。
-
$_conjunction protected
字符串
用于连接此对象在内部存储的每个内部表达式的字符串,例如“AND”、“OR”等。
-
$_typeMap protected
Cake\Database\TypeMap|null
方法摘要
-
__clone() public
克隆此对象及其表达式子树。
-
__construct() public
构造函数。可以使用任何参数创建新的表达式对象并动态构建。否则,可以传递一个条件数组,其中包含要解析的树状数组结构和/或其他表达式对象。可以选择设置用于连接表达式树中每个部分的连接关键字。
-
_addConditions() protected
用于分解嵌套条件数组并构建此对象内部的树结构以表示完整 SQL 表达式的辅助函数。字符串条件直接存储在条件中,而任何其他表示方式都将包装在一个适当的实例或此类实例中。
-
_calculateType() protected
如果在 typeMap 中存储了传递的字段,则返回该字段的类型名称。
-
_parseCondition() protected
通过尝试提取其中的运算符(如果有)来解析字符串条件,最后返回一个适当的 QueryExpression 对象或条件的普通字符串表示形式。此函数负责生成占位符并将值替换为它们,同时将值存储在其他地方以供将来绑定。
-
add() public
向此表达式对象添加一个或多个条件。条件可以在一维数组中表达,这将导致所有条件直接添加到此级别的树中,或者可以任意嵌套,使其创建更多表达式对象,这些对象将嵌套在内部并配置为使用指定的连接。
-
and() public
返回一个新的 QueryExpression 对象,其中包含传递的所有条件,并设置连接为“AND”。
-
between() public
以“field BETWEEN from AND to”的形式向表达式对象添加一个新的条件。
-
case() public
返回一个新的 case 表达式对象。
-
count() public
返回存储在此表达式中的内部条件数量。有助于确定此表达式对象是否为空,或者在编译时它是否会生成非空字符串。
-
eq() public
以“field = value”的形式向表达式对象添加一个新的条件。
-
equalFields() public
使用标识符包装构建相等条件或赋值。
-
exists() public
以“EXISTS (...)”的形式向表达式对象添加一个新的条件。
-
getConjunction() public
获取表达式树中此级别条件的当前配置连接。
-
getDefaultTypes() public
获取当前类型映射的默认类型。
-
getTypeMap() public
返回现有的类型映射。
-
gt() public
以“field > value”的形式向表达式对象添加一个新的条件。
-
gte() public
以“field >= value”的形式向表达式对象添加一个新的条件。
-
hasNestedExpression() public
如果此表达式包含任何其他嵌套的 ExpressionInterface 对象,则返回 true。
-
in() public
以“field IN (value1, value2)”的形式向表达式对象添加一个新的条件。
-
isNotNull() public
以“field IS NOT NULL”的形式向表达式对象添加一个新的条件。
-
isNull() public
以“field IS NULL”的形式向表达式对象添加一个新的条件。
-
iterateParts() public
为构成此表达式的每个部分执行回调。
-
like() public
以“field LIKE value”的形式向表达式对象添加一个新的条件。
-
lt() public
以“field < value”的形式向表达式对象添加一个新的条件。
-
lte() public
以“field <= value”的形式向表达式对象添加一个新的条件。
-
not() public
向此级别的树添加一个新的条件集,并通过在前面添加一个 NOT 来否定最终结果,它将看起来像“NOT ( (condition1) AND (conditions2) )”连接取决于当前为此对象配置的连接。
-
notEq() public
以“field != value”的形式向表达式对象添加一个新的条件。
-
notExists() public
以“NOT EXISTS (...)”的形式向表达式对象添加一个新的条件。
-
notIn() public
以“field NOT IN (value1, value2)”的形式向表达式对象添加一个新的条件。
-
notInOrNull() public
以“(field NOT IN (value1, value2) OR field IS NULL”的形式向表达式对象添加一个新的条件。
-
notLike() public
以“field NOT LIKE value”的形式向表达式对象添加一个新的条件。
-
or() public
返回一个新的 QueryExpression 对象,其中包含传递的所有条件,并设置连接为“OR”。
-
setConjunction() public
更改表达式树中此级别条件的连接。
-
setDefaultTypes() public
覆盖实现对象中字段的默认类型映射。
-
setTypeMap() public
如果 $typeMap 是一个数组,则创建一个新的 TypeMap,否则用给定的类型交换它。
-
sql() public
将节点转换为 SQL 字符串片段。
-
traverse() public
递归地遍历表达式树的每个级别,遍历表达式的每个部分,并执行回调,将表达式实例作为第一个参数传递。
方法详情
__construct() ¶ public
__construct(Cake\Database\ExpressionInterface|array|string $conditions = [], Cake\Database\TypeMap|array $types = [], string $conjunction = 'AND')
构造函数。可以使用任何参数创建新的表达式对象并动态构建。否则,可以传递一个条件数组,其中包含要解析的树状数组结构和/或其他表达式对象。可以选择设置用于连接表达式树中每个部分的连接关键字。
参数
-
Cake\Database\ExpressionInterface|array|string
$conditions optional 包含要添加到此表达式对象中或嵌套在其中的所有条件的树状数组结构。
-
Cake\Database\TypeMap|array
$types optional 要与 $conditions 中传递的值关联的类型的关联数组。
-
string
$conjunction optional 将所有字符串条件连接在一起的粘合剂,在表达式树的此级别上。例如“AND”、“OR”、“XOR”...
另请参阅
_addConditions() ¶ protected
_addConditions(array $conditions, array<int|string, string> $types): void
用于分解嵌套条件数组并构建此对象内部的树结构以表示完整 SQL 表达式的辅助函数。字符串条件直接存储在条件中,而任何其他表示方式都将包装在一个适当的实例或此类实例中。
参数
-
array
$conditions 要存储在此对象中的条件列表
-
array<int|string, string>
$types 与 $conditions 中引用的字段关联的类型列表
返回值
void
_calculateType() ¶ protected
_calculateType(Cake\Database\ExpressionInterface|string $field): string|null
如果在 typeMap 中存储了传递的字段,则返回该字段的类型名称。
参数
-
Cake\Database\ExpressionInterface|string
$field 要获取类型的字段名称。
返回值
string|null
_parseCondition() ¶ protected
_parseCondition(string $condition, mixed $value): Cake\Database\ExpressionInterface|string
通过尝试提取其中的运算符(如果有)来解析字符串条件,最后返回一个适当的 QueryExpression 对象或条件的普通字符串表示形式。此函数负责生成占位符并将值替换为它们,同时将值存储在其他地方以供将来绑定。
参数
-
string
$condition 用于提取实际字段和运算符的值。
-
mixed
$value 要绑定到字段占位符的值
返回值
Cake\Database\ExpressionInterface|string
抛出
InvalidArgumentException
如果运算符无效或在使用 NULL 时丢失。
add() ¶ public
add(Cake\Database\ExpressionInterface|array|string $conditions, array<int|string, string> $types = []): $this
向此表达式对象添加一个或多个条件。条件可以在一维数组中表达,这将导致所有条件直接添加到此级别的树中,或者可以任意嵌套,使其创建更多表达式对象,这些对象将嵌套在内部并配置为使用指定的连接。
如果为任何字段传递的类型表示为“type[]”(注意括号),那么它将导致占位符被动态重写,因此如果值是一个数组,它将为数组中的每个值创建一个占位符。
参数
-
Cake\Database\ExpressionInterface|array|string
$conditions 要添加的单个或多个条件。当使用数组且键为“OR”或“AND”时,将使用该连接创建新的表达式对象,并将内部数组值作为条件传递。
-
array<int|string, string>
$types optional 指向正在传递的值类型的字段的关联数组。用于将值正确地绑定到语句。
返回值
$this
另请参阅
and() ¶ public
and(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array<string, string> $types = []): static
返回一个新的 QueryExpression 对象,其中包含传递的所有条件,并设置连接为“AND”。
参数
-
Cake\Database\ExpressionInterfaceClosure|array|string
$conditions 要使用 AND 连接的条件
-
array<string, string>
$types optional 指向正在传递的值类型的字段的关联数组。用于将值正确地绑定到语句。
返回值
static
between() ¶ public
between(Cake\Database\ExpressionInterface|string $field, mixed $from, mixed $to, string|null $type = null): $this
以“field BETWEEN from AND to”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要比较范围内的值的字段名称。
-
mixed
$from 范围的初始值。
-
mixed
$to 比较范围内的结束值。
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
case() ¶ public
case(Cake\Database\ExpressionInterface|object|scalar|null $value = null, string|null $type = null): Cake\Database\Expression\CaseStatementExpression
返回一个新的 case 表达式对象。
当设置值时,生成的语法为 CASE case_value WHEN when_value ... END
(简单 case),其中 when_value
与 case_value
进行比较。
当未设置值时,生成的语法为 CASE WHEN when_conditions ... END
(搜索 case),其中条件包含比较。
请注意,null
是一个有效的 case 值,因此只有在您确实想创建简单 case 表达式变体时才应传递它!
参数
-
Cake\Database\ExpressionInterface|object|scalar|null
$value optional case 值。
-
string|null
$type optional case 值类型。如果未提供类型,则将尝试从值推断类型。
返回值
Cake\Database\Expression\CaseStatementExpression
eq() ¶ public
eq(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field = value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。如果它以“[]”结尾,并且值为数组,则将创建多个占位符,每个数组中的值对应一个占位符。
返回值
$this
equalFields() ¶ public
equalFields(string $leftField, string $rightField): $this
使用标识符包装构建相等条件或赋值。
参数
-
string
$leftField 左连接条件字段名称。
-
string
$rightField 右连接条件字段名称。
返回值
$this
exists() ¶ public
exists(Cake\Database\ExpressionInterface $expression): $this
以“EXISTS (...)”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface
$expression 内部查询
返回值
$this
getDefaultTypes() ¶ public
getDefaultTypes(): array<int|string, string>
获取当前类型映射的默认类型。
返回值
array<int|string, string>
gt() ¶ public
gt(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field > value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
gte() ¶ public
gte(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field >= value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
hasNestedExpression() ¶ public
hasNestedExpression(): bool
如果此表达式包含任何其他嵌套的 ExpressionInterface 对象,则返回 true。
返回值
bool
in() ¶ public
in(Cake\Database\ExpressionInterface|string $field, Cake\Database\ExpressionInterface|array|string $values, string|null $type = null): $this
以“field IN (value1, value2)”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
Cake\Database\ExpressionInterface|array|string
$values 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
isNotNull() ¶ public
isNotNull(Cake\Database\ExpressionInterface|string $field): $this
以“field IS NOT NULL”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要测试是否不为空的数据库字段
返回值
$this
isNull() ¶ public
isNull(Cake\Database\ExpressionInterface|string $field): $this
以“field IS NULL”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要测试是否为空的数据库字段
返回值
$this
iterateParts() ¶ public
iterateParts(Closure $callback): $this
为构成此表达式的每个部分执行回调。
回调函数需要返回一个值,用该值替换当前访问的部件。如果回调函数返回 null,则该部件将完全从该表达式中丢弃。
回调函数将接收每个条件作为第一个参数,以及键作为第二个参数。可以将第二个参数声明为按引用传递,这将使您能够更改修改后的部件所存储的键。
参数
-
Closure
$callback 要为每个部件运行的回调函数
返回值
$this
like() ¶ public
like(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field LIKE value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
lt() ¶ public
lt(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field < value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
lte() ¶ public
lte(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field <= value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
not() ¶ public
not(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array<string, string> $types = []): $this
向此级别的树添加一个新的条件集,并通过在前面添加一个 NOT 来否定最终结果,它将看起来像“NOT ( (condition1) AND (conditions2) )”连接取决于当前为此对象配置的连接。
参数
-
Cake\Database\ExpressionInterfaceClosure|array|string
$conditions 要添加并取反的条件
-
array<string, string>
$types optional 指向正在传递的值类型的字段的关联数组。用于将值正确地绑定到语句。
返回值
$this
notEq() ¶ public
notEq(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field != value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。如果它以“[]”结尾,并且值为数组,则将创建多个占位符,每个数组中的值对应一个占位符。
返回值
$this
notExists() ¶ public
notExists(Cake\Database\ExpressionInterface $expression): $this
以“NOT EXISTS (...)”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface
$expression 内部查询
返回值
$this
notIn() ¶ public
notIn(Cake\Database\ExpressionInterface|string $field, Cake\Database\ExpressionInterface|array|string $values, string|null $type = null): $this
以“field NOT IN (value1, value2)”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
Cake\Database\ExpressionInterface|array|string
$values 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
notInOrNull() ¶ public
notInOrNull(Cake\Database\ExpressionInterface|string $field, Cake\Database\ExpressionInterface|array|string $values, string|null $type = null): $this
以“(field NOT IN (value1, value2) OR field IS NULL”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
Cake\Database\ExpressionInterface|array|string
$values 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
notLike() ¶ public
notLike(Cake\Database\ExpressionInterface|string $field, mixed $value, string|null $type = null): $this
以“field NOT LIKE value”的形式向表达式对象添加一个新的条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要与值比较的数据库字段
-
mixed
$value 要绑定到 $field 以进行比较的值
-
string|null
$type optional 使用类型映射配置的 $value 的类型名称。
返回值
$this
or() ¶ public
or(Cake\Database\ExpressionInterfaceClosure|array|string $conditions, array<string, string> $types = []): static
返回一个新的 QueryExpression 对象,其中包含传递的所有条件,并设置连接为“OR”。
参数
-
Cake\Database\ExpressionInterfaceClosure|array|string
$conditions 要使用 OR 连接的条件
-
array<string, string>
$types optional 指向正在传递的值类型的字段的关联数组。用于将值正确地绑定到语句。
返回值
static
setConjunction() ¶ public
setConjunction(string $conjunction): $this
更改表达式树中此级别条件的连接。
参数
-
string
$conjunction 用于连接条件的值
返回值
$this
setDefaultTypes() ¶ public
setDefaultTypes(array<int|string, string> $types): $this
覆盖实现对象中字段的默认类型映射。
如果您需要设置跨查询中的多个函数/表达式共享的类型映射,则此方法很有用。
要添加默认值而不覆盖现有值,请使用 getTypeMap()->addDefaults()
参数
-
array<int|string, string>
$types 要设置的类型数组。
返回值
$this
另请参阅
setTypeMap() ¶ public
setTypeMap(Cake\Database\TypeMap|array $typeMap): $this
如果 $typeMap 是一个数组,则创建一个新的 TypeMap,否则用给定的类型交换它。
参数
-
Cake\Database\TypeMap|array
$typeMap 如果传入数组,则创建一个 TypeMap,否则设置给定的 TypeMap
返回值
$this
sql() ¶ public
sql(Cake\Database\ValueBinder $binder): string
将节点转换为 SQL 字符串片段。
参数
-
Cake\Database\ValueBinder
$binder
返回值
字符串
traverse() ¶ public
traverse(Closure $callback): $this
递归地遍历表达式树的每个级别,遍历表达式的每个部分,并执行回调,将表达式实例作为第一个参数传递。
参数
-
Closure
$callback
返回值
$this