OrderByExpression 类
用于 ORDER BY 子句的表达式对象
属性概要
-
$_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,否则将其替换为给定的 TypeMap。
-
sql() public
将 Node 转换为 SQL 字符串片段。
-
traverse() public
递归地迭代表达式的每个部分以用于表达式的树的每个级别,并执行回调,将当前正在迭代的表达式的实例作为第一个参数传递。
方法细节
__construct() ¶ public
__construct(Cake\Database\ExpressionInterface|array|string $conditions = [], Cake\Database\TypeMap|array $types = [], string $conjunction = '')
构造函数
参数
-
Cake\Database\ExpressionInterface|array|string
$conditions optional 排序列
-
Cake\Database\TypeMap|array
$types optional 每列的类型。
-
string
$conjunction optional 用于连接条件的粘合剂。
_addConditions() ¶ protected
_addConditions(array $conditions, array<int|string, string> $types): void
辅助函数,用于分解嵌套的条件数组,并在该对象中构建树结构以表示完整的 SQL 表达式。
新 order by 表达式与现有的表达式合并
参数
-
array
$conditions order by 表达式列表
-
array<int|string, string>
$types $conditions 中引用的字段关联的类型列表
返回
空
_calculateType() ¶ protected
_calculateType(Cake\Database\ExpressionInterface|string $field): string|null
如果传递的字段存储在 typeMap 中,则返回该字段的类型名称
参数
-
Cake\Database\ExpressionInterface|string
$field 要获取类型的字段名称。
返回
字符串|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 要测试非 NULL 的数据库字段
返回
$this
isNull() ¶ public
isNull(Cake\Database\ExpressionInterface|string $field): $this
以“field IS NULL”的形式向表达式对象添加一个新条件。
参数
-
Cake\Database\ExpressionInterface|string
$field 要测试 NULL 的数据库字段
返回
$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,否则将其替换为给定的 TypeMap。
参数
-
Cake\Database\TypeMap|array
$typeMap 如果为数组,则创建一个 TypeMap,否则设置给定的 TypeMap
返回
$this
sql() ¶ public
sql(Cake\Database\ValueBinder $binder): string
将 Node 转换为 SQL 字符串片段。
参数
-
Cake\Database\ValueBinder
$binder
返回
字符串
traverse() ¶ public
traverse(Closure $callback): $this
递归地迭代表达式的每个部分以用于表达式的树的每个级别,并执行回调,将当前正在迭代的表达式的实例作为第一个参数传递。
参数
-
Closure
$callback
返回
$this