我正在尝试解决使用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 - 再次没有成功。
非常感谢任何帮助!
答案 0 :(得分:2)
好的,所以我明白了。我将$join->where
转换为$join->on
,现在一切正常。它出现在它的表面以生成相同的查询,但我想在幕后还会发生其他事情。