我在laravel(流明)查询构建器中发现了postgis函数的问题。
流明版:5.6
Postgres:9.6.9 with postGIS
我有一个有效的代码:
$sql = "ST_DWithin(location ,'POINT($lat $lon)', $distance)";
$query->whereRaw($sql);
这有效,但我想通过参数绑定传递参数:
$sql = "ST_DWithin(location ,'POINT(? ?)', ?)";
$query->whereRaw($sql, [$lat, $lon, $distance]);
乍一看看起来不错,但它返回一个错误:
Invalid parameter number: parameter was not defined (SQL: select * from "my_table" where ST_DWithin(location ,'POINT(123 123)', 1000)
我尝试了其他组合,这有效:
$point = 'POINT($lat $lon)';
$sql = "ST_DWithin(location ,?, ?)";
$query->whereRaw($sql, [$point, $distance]);
所以问题似乎与POINT
功能
这里几何应该作为WKB传递,而不是WKT格式。
select * from "my_table" where ST_DWithin(location ,ST_GeomFromText('POINT(123 123)') , 1000)
希望这会有所帮助。