gpt4 book ai didi

mysql - 将 BINARY 运算符添加到 CakePHP 3 查询

转载 作者:行者123 更新时间:2023-11-29 06:12:51 24 4
gpt4 key购买 nike

我需要一个区分大小写的字符串搜索查询,因此我需要添加 MySQL BINARY operator到查询。

尝试以下操作时会出现错误:

$listing = $this->Listings
->find()
->where([
'BINARY Listings.title' => 'alfred'
]);

同理:

$listing = $this->Listings->get($id, [
'conditions' => [
'BINARY Listings.title' => 'alfred'
]
]);

这在 CakePHP 中是否可行(似乎不可能) 还是我需要重写查询?

最佳答案

您可以使用表达式来构建自定义 SQL。理想情况下,您会创建一个自定义表达式类,如果您切换方言(检查 \Cake\Database\Dialect ),可以重用并可能转换为可移植性。

使用CAST函数

为了快速起见,我会使用 CAST 函数而不是 BINARY 运算符(无论如何这是它的别名),它更易于移植,开箱即用,并且在需要时更容易进一步移植。这是一个基本示例:

use Cake\Database\Expression\IdentifierExpression;
use Cake\Database\Expression\QueryExpression;

// ...

$listing = $this->Listings
->find()
->where(function (QueryExpression $exp) {
$cast = $this->Listings
->query()
->func()
->cast([
new IdentifierExpression('Listings.title'),
'BINARY' => 'literal'
])
->tieWith(' AS ');

return $exp->eq($cast, 'alfred');
});

通用函数 epression 更改为使用 AS 连接参数,因此您可以轻松地为函数提供标识符和类型部分。该列作为标识符表达式传递以支持自动标识符引用,您可能永远不需要它,但如果您不关心几微秒的额外编译时间,它不会有什么坏处。

BINARY 运算符

为了完整起见,一个使用表达式添加二元运算符的简短示例:

function (QueryExpression $exp) {
$binary = $this->Listings
->query()
->newExpr()
->tieWith(' ')
->add('BINARY')
->add([
'Listings.title' => 'alfred'
]);

return $exp->add($binary);
}

这应该是不言自明的,原始字符串 BINARY 和条件将使用空格连接在一起。

另见

关于mysql - 将 BINARY 运算符添加到 CakePHP 3 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37486735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com