Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql/Laravel逻辑测试返回false,但查询返回true_Php_Mysql_Datetime_Laravel_Eloquent - Fatal编程技术网

Php Mysql/Laravel逻辑测试返回false,但查询返回true

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)

我不明白为什么mysql查询会返回不应该返回的结果,问题是: 我正在尝试返回一段时间内不可用的用户的结果。 因此,我将表availabilities unavailable start datetime和unavailable end datetime与外键一起提供给用户。 现在,我已经选择了要测试的日期时间

以下是查询:

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查看脚本;就像这里: