2014-11-12 3 views
0

mysql 쿼리가 결과를 반환하지 않는 이유를 알 수 없습니다. 다음은 여기에 있습니다. 사용자가 아닌 사용자에 대한 결과를 반환하려고합니다. 기간 동안 사용할 수 없습니다. 그래서 테이블 가용성을 사용할 수 없으며 datetime을 시작하고 사용자가 외래 키를 사용하여 datetime을 끝낼 수 없습니다. 이제 테스트를 위해 선택한 날짜 시간이 있습니다.Mysql/Laravel false를 반환하는 쿼리가 true를 반환하는 쿼리

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 
: 여기
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(); 

이 경우 쿼리에 잘못된 테스트하거나 문제를보고 돌려 사용자가 수동으로 만든 논리적 테스트의 결과입니다 : 여기

쿼리입니다

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 

감사합니다!

+0

URL : http://stackoverflow.com/a/26886515/784588 –

답변

0

사용자 모델이 올바른 SQL 스크립트를 트리거하지 않는 것처럼 보입니다. 당신은이 도구를 사용하여 Eloquent Model이 정확하게 트리거 된 SQL을 확인할 수 있습니다. barryvdh/laravel-debugbar

+0

dd (DB :: getQueryLog())를 통해 스크립트를 볼 수 있습니다. ; – commandantp

관련 문제