如何解决CakePHP在查询中执行自动下划线
以下是我查询的一部分,该查询根据特定格式的类似运算符进行过滤
$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
->where([
"DATE_FORMAT(`CallRequests`.`updated_date`,'%m/%d/%Y %l:%i %p') like :date",])
->bind(':date',$string . '%','string');
或者,您可以将表达式用于DATE_FORMAT()
函数和LIKE
比较:
$baseQuery->where(
function (
\Cake\Database\Expression\QueryExpression $exp,\Cake\ORM\Query $query
) use ($string) {
$dateFormat = $query->func()->DATE_FORMAT([
$query->identifier('CallRequests.updated_date'),'%m/%d/%Y %l:%i %p'
]);
return [
$exp->like($dateFormat,$string . '%')
];
}
);
另请参见
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。