如何使用laravel进行区分大小写的字符串匹配?
SELECT * FROM `invites` WHERE `token`='OGwie2e2985tOEGewgu23hUFs'
可以
完成 Invite::where('token',$token)->first()
如果我想要区分大小写的匹配,我需要使用这样的语句(或者类似的,据我所知):
SELECT * FROM `invites` WHERE BINARY `token`='OGwie2e2985tOEGewgu23hUFs'
我最好的猜测是:
Invite::whereRaw("BINARY `token`='{$token}'")->first()
但是我的输入没有通过准备好的声明,对吗?
答案 0 :(得分:18)
您需要使用DB :: raw(),或许类似
Invite::where(DB::raw('BINARY `token`'), $token)->first();
或者:
Invite::whereRaw("BINARY `token`= ?",[$token])->first()
答案 1 :(得分:13)
有点晚了,但这不是一个更好的选择吗?
Invite::whereRaw("BINARY `token`= ?", array($token))->first()
答案 2 :(得分:2)
我知道这个问题很旧,但以防万一有人偶然发现。在撰写本文时,Laravel 是版本 8,这是有效的:
在您的迁移中:
$table->string("token")->charset("utf8")->collation("utf8_bin")->nullable();
这将实现区分大小写,而无需修改每个查询,前提是您尚未处理现有架构。由于该问题不提供有关结构是否已创建的上下文,如果您总是希望将列查询为区分大小写,这可以适用。