Laravel查询构建器在直接SQL返回结果的地方返回空

时间:2014-07-08 00:24:39

标签: php mysql sql laravel eloquent

我正在尝试解决使用Laravel的查询构建器的问题我没有得到任何结果,但是当我运行相同的查询时,使用PHPMyAdmin从getQueryLog获取,我获得了预期的结果。

我的查询构建器:

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 - 再次没有成功。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

好的,所以我明白了。我将$join->where转换为$join->on,现在一切正常。它出现在它的表面以生成相同的查询,但我想在幕后还会发生其他事情。