У меня есть Laravel Backend для управления своего рода плагином. Я использую postgresql с расширением postgis. Из оболочки postgres я могу выявлять функции postgis. Однако, когда я пытаюсь использовать те же функции из моего контроллера laravel, я получаю неопределенные ошибки в столбцах. Как вы можете видеть из моих примеров, я не пытаюсь что-либо запросить из базы данных. У меня в памяти уже есть две точки, между которыми я пытаюсь найти расстояние.
Вот запрос:
SELECT ST_Distance(ST_Transform(ST_GeomFromText('POINT(-72.1235 42.3521)',4326),2163),ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)', 4326),2163));
Из оболочки получаю правильный вывод
Однако при попытке выполнить необработанный оператор SQL из laravel
DB::select ( DB::raw( 'SELECT ST_Distance(ST_Transform(ST_GeomFromText("POINT(-72.1235 42.3521)",4326),2163),ST_Transform(ST_GeomFromText("LINESTRING(-72.1260 42.45, -72.123 42.1546)", 4326),2163))' ) );
У меня есть предельные знания как в laravel, так и в postgresql, поэтому очень вероятно, что я делаю что-то явно не так. Однако я не смог найти свои ресурсы по использованию postgis из laravel. Любая помощь очень ценится!
Просто: используйте первый пример SQL для второго. Во втором примере используются некорректные символы цитирования ('
а также "
).
Как правило для PostgreSQL, используйте только двойные кавычки (например, "MyTable"
) для объектов базы данных, таких как таблицы, имена столбцов и т. д., и одинарные кавычки (например, 'a string'
) для строковых литералов, например text
а также character varying (n)
,
Первый пример правильно использовал строковый литерал 'POINT(-72.1235 42.3521)'
, но второй использовал "POINT(-72.1235 42.3521)"
что объясняет, почему он искал объект базы данных с таким именем, чего, очевидно, нет.
Других решений пока нет …