2015-03-12 4 views
2

У меня есть laravel backend для управления плагином местоположения. Я использую postgresql с расширением postgis. Из оболочки postgres я могу выполнять функции postgis exect. Однако, когда я пытаюсь использовать одни и те же функции из моего контроллера laravel, я получаю неопределенные ошибки столбца. Как вы можете видеть в моих примерах, я не пытаюсь запрашивать что-либо из базы данных. У меня есть две точки, которые уже загружены в память, и я пытаюсь найти расстояние между ними.Использование функций географии 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)); 

Из оболочки я получаю правильный вывод shell output

Однако при попытке выполнить необработанный заявление 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 output

У меня есть предельные знания как в laravel, так и в postgresql, поэтому я, скорее всего, делаю что-то вопиющее. Тем не менее, я не смог найти свои ресурсы по использованию postgis из laravel. Любая помощь очень ценится!

ответ

2

Простой: используйте первый пример SQL для второго. Во втором примере используются неправильные кавычки (' и ").

По общему правилу для PostgreSQL используйте только двойные кавычки (например, "MyTable") для объектов базы данных, таких как таблицы, имена столбцов и т.д., и одиночные кавычки (например 'a string') для строковых литералов, как text и character varying (n).

Первый пример правильно использовал строковый литерал 'POINT(-72.1235 42.3521)', но второй использовал "POINT(-72.1235 42.3521)", который объясняет, почему он искал объект базы данных с этим именем, чего, очевидно, нет.

Смежные вопросы