Php Laravel查询生成器返回空,其中直接SQL返回结果
我试图解决一个问题,即使用Laravel的查询生成器无法获得任何结果,但当我使用PHPMyAdmin从getQueryLog运行相同的查询时,我会得到预期的结果 我的查询生成器:Php Laravel查询生成器返回空,其中直接SQL返回结果,php,mysql,sql,laravel,eloquent,Php,Mysql,Sql,Laravel,Eloquent,我试图解决一个问题,即使用Laravel的查询生成器无法获得任何结果,但当我使用PHPMyAdmin从getQueryLog运行相同的查询时,我会得到预期的结果 我的查询生成器: DB::table('likes') ->join('geoip_blocks', function($join) { $join->where("ip", ">=", "block_start")
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();
DB::table('likes')
->join('geoip_blocks',函数($join)
{
$join->where(“ip”、“>=”、“块启动”)
->其中(“ip”,“聚合}”))
->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
数组(大小=3)
'query'=>string'选择'country',count(*)作为'likes'内部连接'geoip_blocks'在'ip`>='上的计数?好的,我想起来了。我将$join->where
切换到$join->on
,现在一切正常。从表面上看,这似乎是为了生成相同的查询,但我猜幕后还发生了其他事情。你到底为什么不使用雄辩???与雄辩相同的交易。我尝试使用查询生成器,因为雄辩不起作用!好的,如果其他所有操作都失败,您总是可以使用带绑定参数的好的旧PDO。是的,JoinClause
类上的where
假定用于固定值,而on
则用于其他列。您的第一次尝试将block\u start
和block\u end
视为字符串,而不是要比较的列。
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`