Php Mysql/Laravel逻辑测试返回false,但查询返回true
我不明白为什么mysql查询会返回不应该返回的结果,问题是: 我正在尝试返回一段时间内不可用的用户的结果。 因此,我将表availabilities unavailable start datetime和unavailable end datetime与外键一起提供给用户。 现在,我已经选择了要测试的日期时间 以下是查询:Php Mysql/Laravel逻辑测试返回false,但查询返回true,php,mysql,datetime,laravel,eloquent,Php,Mysql,Datetime,Laravel,Eloquent,我不明白为什么mysql查询会返回不应该返回的结果,问题是: 我正在尝试返回一段时间内不可用的用户的结果。 因此,我将表availabilities unavailable start datetime和unavailable end datetime与外键一起提供给用户。 现在,我已经选择了要测试的日期时间 以下是查询: User::whereHas('availabilities', function($q)use($selected_date_time)
User::whereHas('availabilities', function($q)use($selected_date_time)
{
$q->where('unavailable_start_date', '>', $selected_date_time)
->where('unavailable_end_date', '>', $selected_date_time)
;
})
->orWhereHas('availabilities', function($q)use($selected_date_time)
{
$q->where('unavailable_start_date', '<', $selected_date_time)
->where('unavailable_end_date', '<', $selected_date_time)
;
})
->with('availabilities')
->get();
以下是对返回的用户手动执行的逻辑测试的结果,以查看该测试是否错误或查询中是否存在问题:
selected string(19) "2014-11-13 10:30:00"
unavailableStart string(19) "2014-11-12 11:30:00"
unavailableEnd string(19) "2014-11-18 11:00:00"
$undateS > $selected_date_time : result = bool(false)
$undateE > $selected_date_time : result = bool(true) ==> two above && return false
$undateS < $selected_date_time : result = bool(true)
$undateE < $selected_date_time : result = bool(false) ==> two above && return false
正如您所见,OR测试将返回FALSE,这意味着该用户不应出现在结果中。。。奇怪的是,我有另一个用户,在类似的时间段内也被设置为不可用,结果中不会返回他
我在这件事上做错了什么
执行编辑SQL:
select * from `users` where `is_user` = ? and (select count(*) from `availabilities` where `availabilities`.`user_id` = `users`.`id` and `unavailable_start_date` > ? and `unavailable_end_date` > ?) >= 1 or (select count(*) from `availabilities` where `availabilities`.`user_id` = `users`.`id` and `unavailable_start_date` < ? and `unavailable_end_date` < ?) >= 1
谢谢你的帮助 用户模型似乎没有触发正确的sql脚本。您可以检查使用此工具触发的雄辩模型到底是什么sql,我可以通过ddDB::getQueryLog查看脚本;就像这里: