2014-07-08 2 views
2

Laravel의 쿼리 작성기를 사용하여 아무 결과도 얻지 못하는 문제를 해결하려고하지만 동일한 쿼리를 실행할 때 PHPMyAdmin을 사용하여 getQueryLog에서 가져온 결과가 예상됩니다.Laravel 쿼리 작성기 반환 빈 직접 SQL 결과를 반환합니다

내 쿼리 빌더 :

DB::table('likes') 
      ->join('geoip_blocks', function($join) 
      { 
       $join->where("ip", ">=", "block_start") 
        ->where("ip", "<=", "block_end"); 
      }) 
      ->join('geoip_locations', "geoip_locations.id", "=", "location_id") 
      ->select(array("country", DB::raw("count(*) as {$this->aggregate}"))) 
      ->groupBy('country')->get(); 

querylog의 출력 :

array (size=3) 
    'query' => string 'select `country`, count(*) as count from `likes` inner join `geoip_blocks` on `ip` >= ? and `ip` <= ? inner join `geoip_locations` on `geoip_locations`.`id` = `location_id` group by `country`' (length=196) 
    'bindings' => 
    array (size=2) 
     0 => string 'block_start' (length=11) 
     1 => string 'block_end' (length=9) 
    'time' => float 2.69 

내가 phpMyAdmin을 체결 쿼리 :

select `country`, count(*) as count from `likes` inner join `geoip_blocks` on `ip` >= block_start and `ip` <= block_end inner join `geoip_locations` on `geoip_locations`.`id` = `location_id` group by `country` 

내가 위의 쿼리가 매우 비효율적 알고있다. 이것은 단지 개념의 증명을위한 것이 었습니다. 그래서 더 이상 신경 쓰지 않는 이유가 있습니다. 저는 모호성과 explicitness의 다양한 학위를 시도했지만 아무 소용이 없습니다. 또한 두 번째 조인을 제거하고 location_id를 얻으려고 시도했습니다. 다시 성공하지 못했습니다.

도움을 주시면 대단히 감사하겠습니다.

+0

어째서 지구에서 당신은 사색을 사용하지 않습니까 ??? – MightyPork

+0

Eloquent와 같은 거래. Eloquent가 작동하지 않기 때문에 쿼리 빌더를 사용해 보았습니다! – pragmatist1

+0

그 밖의 모든 것이 실패 할 경우 항상 바운드 매개 변수가있는 오래된 PDO를 사용할 수 있습니다. – MightyPork

답변

2

좋아, 그래서 알아 냈어. 나는 $join->on님께로 $join->where을 바꿨다. 이제 모든 것이 작동한다. 그것은 같은 쿼리를 생성하는 그것의 얼굴에 나타납니다,하지만 뭔가 다른 일이 뒤에서 진행되고있는 것 같아요.

+2

예,'JoinClause' 클래스의'where'는 고정 된 값으로 간주되고, 다른 컬럼은'on'입니다. 첫 번째 시도는 비교할 열 대신에'block_start' 및'block_end'를 문자열로 취급했습니다. –

관련 문제