大佬教程收集整理的这篇文章主要介绍了PHP-使用相同查询与DB :: raw和Eloquent的不同结果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
运行雄辩的联接查询时,我得到了一些意外的结果.通过使用完全相同的查询,我得到两个不同的结果.一个使用DB :: raw()运行,第二个使用Eloquent.
在口才查询中,与
其中squad_user.leave_time> = seasons.start_time
丢失,不会包含在结果集中.符合条件的用户
或squad_user.leave为null
将包括在内.
这是两个查询结果的唯一区别.原始查询实际上产生所需的结果集.
真正令我困惑的是,如果我同时查询Laravel和MySQL的查询日志,则在同时运行原始查询和Eloquent查询时会得到完全相同的查询.
return \DB::SELEct(\DB::raw('
SELEct users.*
from users
inner join squad_user on users.id = squad_user.user_id
inner join seasons on squad_user.squad_id = seasons.squad_id
where squad_user.join_time <= seasons.end_time
and (squad_user.leave_time >= seasons.start_time or squad_user.leave_time is null)
and seasons.id = :seasonId
'),
['seasonId' => 3]
);
口才查询
return User::join('squad_user', 'users.id', '=', 'squad_user.user_id')
->join('seasons', 'squad_user.squad_id', '=', 'seasons.squad_id')
->where('squad_user.join_time', '<=', 'seasons.end_time')
->where(function ($query)
{
$query->where('squad_user.leave_time', '>=', 'seasons.start_time')
->orWhereNull('squad_user.leave_time');
})
->where('seasons.id', 3)
->get(['users.*']);
Laravel的雄辩查询日志
SELEct `users`.*
from `users`
inner join `squad_user` on `users`.`id` = `squad_user`.`user_id`
inner join `seasons` on `squad_user`.`squad_id` = `seasons`.`squad_id`
where `squad_user`.`join_time` <= seasons.end_time
and (`squad_user`.`leave_time` >= seasons.start_time or `squad_user`.`leave_time` is null)
and `seasons`.`id` = 3
{"bindings":["seasons.end_time","seasons.start_time",3],"time":0.38,"name":"MysqL"}
SELEct `users`.*
from `users`
inner join `squad_user` on `users`.`id` = `squad_user`.`user_id`
inner join `seasons` on `squad_user`.`squad_id` = `seasons`.`squad_id`
where `squad_user`.`join_time` <= ?
and (`squad_user`.`leave_time` >= ? or `squad_user`.`leave_time` is null)
and `seasons`.`id` = ?
SELEct users.*
from users
inner join squad_user on users.id = squad_user.user_id
inner join seasons on squad_user.squad_id = seasons.squad_id
where squad_user.join_time <= seasons.end_time
and (squad_user.leave_time >= seasons.start_time or squad_user.leave_time is null)
and seasons.id = ?
我会很感激这里的任何指示,因为我很失落.
解决方法:
where绑定第三参数并将其通常视为字符串,除非您通过使用raw语句告诉它不这样做. DB :: raw或whereRaw将为您工作:
return User::join('squad_user', 'users.id', '=', 'squad_user.user_id')
->join('seasons', 'squad_user.squad_id', '=', 'seasons.squad_id')
->where('squad_user.join_time', '<=', DB::raw('seasons.end_time'))
->where(function ($query)
{
$query->where('squad_user.leave_time', '>=', DB::raw('seasons.start_time'))
->orWhereNull('squad_user.leave_time');
})
->where('seasons.id', 3)
->get(['users.*']);
以上是大佬教程为你收集整理的PHP-使用相同查询与DB :: raw和Eloquent的不同结果全部内容,希望文章能够帮你解决PHP-使用相同查询与DB :: raw和Eloquent的不同结果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。