CakePHP在查询中自动下套管

CakePHP在查询中自动下套管,cakephp,cakephp-4.x,Cakephp,Cakephp 4.x,下面是我的查询的一部分,它根据特定格式的like运算符进行筛选 $baseQuery->where( ["DATE_FORMAT(`CallRequests`.`updated_date`, '%m/%d/%Y %l:%i %p') like" => $string . '%'], ['updated_date' => 'string'] ); 但是由于某种原因,CakePHP在执行查询之前自动将%Y小写 以下是调试转储查询中的相关部分

下面是我的查询的一部分,它根据特定格式的like运算符进行筛选

$baseQuery->where(
     ["DATE_FORMAT(`CallRequests`.`updated_date`, '%m/%d/%Y %l:%i %p') like" => $string . '%'],
     ['updated_date' => 'string']
);
但是由于某种原因,CakePHP在执行查询之前自动将
%Y
小写

以下是调试转储查询中的相关部分:

DATE_FORMAT(`CallRequests`.`created_date`, '%m/%d/%y %l:%i %p') like :c0'
我知道使用原始查询可以避免这种情况


但是,在不使用原始查询的情况下,这种行为是否有解决方法?

您不应该将SQL片段放入
key=>value
条件的键中。键端是用来保存标识符和可选的运算符(由空格分隔)。在处理时,空格的右侧(即运算符部分)将被小写,这就是您所经历的

您已经在使用原始SQL,因此进一步使用单值条件来提供完整的原始SQL代码段并使用绑定来注入您的值并不是一个很大的飞跃:

$baseQuery
->在哪里([
“日期格式(`CallRequests`.`updated`DATE`,'%m/%d/%Y%l:%i%p')类似于:DATE”,
])
->绑定(':date',$string'.%','string');
或者,您可以为
DATE\u FORMAT()
函数和
LIKE
比较使用表达式:

$baseQuery->where(
作用(
\Cake\Database\Expression\QueryExpression$exp,
\蛋糕\ORM\Query$Query
)使用($string){
$dateFormat=$query->func()->DATE\u格式([
$query->identifier('CallRequests.updated_date'),
“%m/%d/%Y%l:%i%p”
]);
返回[
$exp->like($dateFormat,$string.'%'))
];
}
);
另见


您不应该将SQL代码片段放入
键=>值的键中。键端是用来保存标识符和可选的运算符(由空格分隔)。在处理时,空格的右侧(即运算符部分)将被小写,这就是您所经历的

您已经在使用原始SQL,因此进一步使用单值条件来提供完整的原始SQL代码段并使用绑定来注入您的值并不是一个很大的飞跃:

$baseQuery
->在哪里([
“日期格式(`CallRequests`.`updated`DATE`,'%m/%d/%Y%l:%i%p')类似于:DATE”,
])
->绑定(':date',$string'.%','string');
或者,您可以为
DATE\u FORMAT()
函数和
LIKE
比较使用表达式:

$baseQuery->where(
作用(
\Cake\Database\Expression\QueryExpression$exp,
\蛋糕\ORM\Query$Query
)使用($string){
$dateFormat=$query->func()->DATE\u格式([
$query->identifier('CallRequests.updated_date'),
“%m/%d/%Y%l:%i%p”
]);
返回[
$exp->like($dateFormat,$string.'%'))
];
}
);
另见