我正在尝试从类型为VARCHAR
的表字段customernumber中获取数据。情况就是这样,因为客户编号可以是“0024”和“1234”。
$query->getTypeMap()
告诉我它在cakePHP中有string
类型。现在,当输入“24”或“0024”时,我们的客户希望以“0024”获得客户。
没问题我想到了,所以我只是将输入值打印到int
。但是cakePHP ORM似乎根据类型映射进行投射,我不知道如何在运行中更改类型。
我试过了:
$query->find()
->select()
->where(['customernumber' => intval($input)]
->typeMap(['customernumber' => 'integer']);
但在搜索输入中输入24时,我收到一个空结果。
我希望你能看到我在寻找的东西。谢谢!
答案 0 :(得分:0)
我会使用mysql CAST函数
$cast = $query->func()->convert([
'customernumber' => 'identifier',
'signed' => 'literal'
]) ;
$input = '0024';
$query
->where(function ($exp) use ($cast, $input) {
return $exp->eq($cast, intval($input));
});
以这种方式生成的查询将是
WHERE (convert((username), signed)) = '23'
答案 1 :(得分:0)
谢谢大家,对不起,如果我的问题不清楚,但是今天早上我能够找到解决方案,考虑到你的意见和答案,并通过ORM调试了一下我终于找到了一个解决方案,这对我有用。
问题是字段customernumber设置为" text"在进行customernumber = :comparevalue
之类的比较操作时,:comparevalue
始终被强制转换为文本。所以我不得不把它映射到' Integer'在飞行中,我现在就这样做了:
$query->where(function ($exp) use ($input) {
return $exp->eq('customernumber', intval($input), 'integer');
})