TrO*_*nNe 12 php mysql sql laravel
我有一些我不太了解的东西,我有解决方案,但我不知道为什么这会让我有点疯狂
调节器
DB::connection()->enableQueryLog();
$transfer = Transfer::where('ticket_id', $last_ticket)->where('event_id', 36)->where('buyer', $user_email)->first();
$queries = DB::getQueryLog();
dd($queries);
Run Code Online (Sandbox Code Playgroud)
结果
array:1 [
0 => array:3 [
"query" => "select * from `transfers` where `ticket_id` = ? and `event_id` = ? and `buyer` = ? limit 1"
"bindings" => array:3 [
0 => false
1 => 36
2 => "[email protected]"
]
"time" => 0.36
]
]
Run Code Online (Sandbox Code Playgroud)
情况:
$last_ticket在DB中是唯一的,永远不会null,空或false.
在我的例子$last_ticket中false,但在DB中没有任何false,为什么我仍然得到结果?
是因为只要条件是假的,它就不会进入等式吗?
所以问题是:我如何才能收到正确的结果含义:如果$ last_ticket为false则没有结果,如果它有一些数据,则返回由$ last_ticket限制的行结果
一种选择可能是if($last_ticket == false){$last_ticket='randomInexistentString_ag4dh&2g32y4t'}因为它不是零或零,但我不认为这是更漂亮的方式
Joe*_*inz 13
MySQL中的零总是匹配任何不以数字开头的字符串 - 这是因为它希望比较的两边都是相同的类型,因此它将字符串转换为数字,以及任何不转换的字符串以数字开头评估为0自动.
现在,你不是在喂它0- 但是你正在喂它false,而在MySQL中,这不是一个真正的布尔值,而实际上是一个0.
如果不确切知道你的数据库是什么样的,我会说这是最可能的解释.
有办法解决这个问题,例如你可以在->when()Eloquent上使用链接:
Transfer::where('event_id', 36)
->where('buyer', $user_email)
->when($last_ticket, function ($query) use ($last_ticket) {
$query->where('ticket_id', $last_ticket);
})
->first();
Run Code Online (Sandbox Code Playgroud)
(取自记忆,语法可能有点偏离.感谢Rick James在评论中进行更正.)
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |