Я обнаружил проблему с постгис-функциями внутри компоновщика запросов laravel (lumen).
Версия Lumen: 5.6
Postgres: 9.6.9 с 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