类 WhenThenExpression
表示具有流畅 API 的 SQL when/then 子句。
属性摘要
-
$_typeMap protected
Cake\Database\TypeMap
在使用条件数组作为
WHEN
值时要使用的类型映射。 -
$hasThenBeenDefined protected
bool
是否已定义
THEN
值,例如是否已调用then()
。 -
$then protected
Cake\Database\ExpressionInterface|object|scalar|null
THEN
值。 -
$thenType protected
string|null
THEN
结果类型。 -
$validClauseNames protected
list<string>
可以使用
clause()
方法的子句名称列表。 -
$when protected
Cake\Database\ExpressionInterface|object|scalar|null
Then
WHEN
值。 -
$whenType protected
array|string|null
WHEN
值类型。
方法摘要
-
__clone() public
克隆内部表达式对象。
-
__construct() public
构造函数。
-
_castToExpression() protected
如果类型类实现了 ExpressionTypeInterface,则有条件地将传递的值转换为 ExpressionInterface 对象。否则,返回未修改的值。
-
_requiresToExpressionCasting() protected
返回一个数组,其中包含需要将值转换为表达式的类型,这些类型来自作为参数传递的类型名称列表。
-
clause() public
返回给定子句的可用数据。
-
compileNullableValue() protected
将可空值编译为 SQL。
-
getResultType() public
返回表达式的结果值类型。
-
inferType() protected
推断给定值的抽象类型。
-
sql() public
将节点转换为 SQL 字符串片段。
-
then() public
设置
THEN
结果值。 -
traverse() public
递归地遍历表达式的每个部分,针对表达树的每一层级,并执行回调,将当前正在迭代的表达式的实例作为第一个参数传递。
-
when() public
设置
WHEN
值。
方法详情
__construct() ¶ public
__construct(Cake\Database\TypeMap|null $typeMap = null)
构造函数。
参数
-
Cake\Database\TypeMap|null
$typeMap optional 在使用条件数组作为
WHEN
值时要使用的类型映射。
_castToExpression() ¶ protected
_castToExpression(mixed $value, string|null $type = null): mixed
如果类型类实现了 ExpressionTypeInterface,则有条件地将传递的值转换为 ExpressionInterface 对象。否则,返回未修改的值。
参数
-
mixed
$value 要转换为 ExpressionInterface 的值
-
string|null
$type optional 类型名称
返回
mixed
_requiresToExpressionCasting() ¶ protected
_requiresToExpressionCasting(array $types): array
返回一个数组,其中包含需要将值转换为表达式的类型,这些类型来自作为参数传递的类型名称列表。
参数
-
array
$types 类型名称列表
返回
array
clause() ¶ public
clause(string $clause): Cake\Database\ExpressionInterface|object|scalar|null
返回给定子句的可用数据。
可用子句
以下子句名称可用
when
:WHEN
值。then
:THEN
结果值。
参数
-
string
$clause 要获取的子句名称。
返回
Cake\Database\ExpressionInterface|object|scalar|null
抛出
InvalidArgumentException
如果给定的子句名称无效。
compileNullableValue() ¶ protected
compileNullableValue(Cake\Database\ValueBinder $binder, Cake\Database\ExpressionInterface|object|scalar|null $value, string|null $type = null): string
将可空值编译为 SQL。
参数
-
Cake\Database\ValueBinder
$binder 要使用的值绑定器。
-
Cake\Database\ExpressionInterface|object|scalar|null
$value 要编译的值。
-
string|null
$type optional 值类型。
返回
string
getResultType() ¶ public
getResultType(): string|null
返回表达式的结果值类型。
返回
string|null
另请参见
inferType() ¶ protected
inferType(mixed $value): string|null
推断给定值的抽象类型。
参数
-
mixed
$value 要推断类型的值。
返回
string|null
sql() ¶ public
sql(Cake\Database\ValueBinder $binder): string
将节点转换为 SQL 字符串片段。
参数
-
Cake\Database\ValueBinder
$binder
返回
string
then() ¶ public
then(Cake\Database\ExpressionInterface|object|scalar|null $result, string|null $type = null): $this
设置 THEN
结果值。
参数
-
Cake\Database\ExpressionInterface|object|scalar|null
$result 结果值。
-
string|null
$type optional 结果类型。如果未提供类型,则将从给定的结果值推断类型。
返回
$this
traverse() ¶ public
traverse(Closure $callback): $this
递归地遍历表达式的每个部分,针对表达树的每一层级,并执行回调,将当前正在迭代的表达式的实例作为第一个参数传递。
参数
-
Closure
$callback
返回
$this
when() ¶ public
when(object|array|string|float|int|bool $when, array<string, string>|string|null $type = null): $this
设置 WHEN
值。
参数
-
object|array|string|float|int|bool
$when WHEN
值。当使用条件数组时,它必须与\Cake\Database\Query::where()
兼容。请注意,此参数对于使用用户数据不完全安全,因为用户提供的数组将允许原始 SQL 潜入!如果您计划使用用户数据,则传递单个类型作为$type
参数(这会强制$when
值为非数组,然后始终绑定数据),使用条件数组,其中用户数据仅在数组条目的值侧传递,或者自定义绑定!-
array<string, string>|string|null
$type optional when 值的类型。使用数组样式条件时为关联数组,否则为字符串。如果未提供类型,则将尝试从值中推断类型。
返回
$this
抛出
InvalidArgumentException
如果 `$when` 参数为空数组。
InvalidArgumentException
如果 `$when` 参数为数组,而 `$type` 参数既不是数组,也不是 null。
InvalidArgumentException
如果 `$when` 参数为非数组值,而 `$type` 参数既不是字符串,也不是 null。