使用laravel中的postgis地理功能。

时间:2015-03-12 14:53:56

标签: php postgresql laravel postgis

我有一个laravel后端来管理各种各样的位置插件。我正在使用postgresql和postgis扩展。从postgres shell我能够演绎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中我得到了正确的输出 shell output

但是,尝试从laravel

执行原始SQL语句时
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都有限制,所以我很可能会做一些明显错误的事情。但是,我无法从laravel中找到使用postgis的资源。任何帮助是极大的赞赏!

1 个答案:

答案 0 :(得分:2)

简单:第二个使用第一个SQL示例。第二个示例使用了不正确的引号字符('")。

作为PostgreSQL的一般规则,对表格,列名等数据库对象使用双引号(例如"MyTable"),对字符串文字使用单引号(例如'a string'),如textcharacter varying (n)

第一个示例正确使用了字符串文字'POINT(-72.1235 42.3521)',但第二个示例使用了"POINT(-72.1235 42.3521)",这解释了为什么它正在寻找具有该名称的数据库对象,显然你没有。