Laravel查询生成器返回空,直接SQL返回结果


Laravel query builder returning empty where direct SQL returns results

我正试图解决使用Laravel的查询生成器我没有得到结果的问题,但是当我运行相同的查询时,使用PHPMyAdmin从getQueryLog获取我得到预期的结果。

My Query builder:

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`

我知道上面的查询非常低效。这只是一个概念的证明,它甚至没有工作,所以为什么要继续下去。我试过不同程度的模棱两可和明确,但都无济于事。还尝试删除第二个连接,只是获得location_id -再次没有成功。

任何帮助都非常感谢!

好了,我算出来了。我把$join->where换成了$join->on,现在一切正常了。从表面上看,它似乎生成了相同的查询,但我猜幕后发生了其他事情。