Laravel查询中的PostGIS函数

时间:2018-09-20 17:43:44

标签: laravel postgresql postgis

我通常使用MySQL,所以PostgreSQL对我来说是新事物

我正在尝试在查询中使用PostGIS

SELECT ST_X(g.geomout), ST_Y(g.geomout) FROM geocode('?', 1) as g

如果我在终端中而不是从Laravel中运行查询,它应该可以正常工作

在Laravel中,我使用\DB::connection('pgsql')->select(...,但找不到geocode函数

  

SQLSTATE [42883]:未定义函数:7错误:函数   地理编码(未知,在teger中)不存在
  第1行:从地址解析代码('?'中选择ST_X(g.geomout),ST_Y(g.geomout),   1)...   提示:没有函数匹配给定的名称和参数类型。您   可能需要添加显式类型转换。 (SQL:选择   ST_X(g.geomout),ST_Y(g.geomout)来自地理编码('54北温特   俄亥俄州哥伦布街,43015',1)As g)

     

SQLSTATE [42883]:未定义函数:7错误:函数   地理编码(未知,在teger中)不存在
  第1行:从地址解析代码('?'中选择ST_X(g.geomout),ST_Y(g.geomout),   1)...   提示:没有函数匹配给定的名称和参数   类型。您可能需要添加显式类型转换。

但是此查询在终端中可以正常工作

SELECT ST_X(g.geomout), ST_Y(g.geomout)
FROM geocode('54 North Winter Street Columbus, OH, 43015', 1) As g

PostGIS扩展已启用,如果我运行:

\DB::connection('pgsql')->select("SELECT postgis_full_version()")

我将获得带有版本信息的结果

search_path设置为"$user", public, postgis,最初是"$user", public,没有任何改变

我还尝试使用public.geocodeUnable to call postgres & postgis function in query builder laravel 4),结果相同

更新:

我有tiger_geocoder扩展名,geocode在那里定义,我需要使用tiger.geocode,但是ST_X/ST_Y将失败,因为它们是在{{1}中定义的}

最终查询看起来像public

但现在我得到了:

  

SQLSTATE [42883]:未定义函数:7错误:函数   soundex(未知)不存在

如何在单个模式上定义所有这些功能?

更新2:

这就是问题所在,Laravel中的连接SELECT public.ST_X(g.geomout), public.ST_Y(g.geomout) FROM tiger.geocode(?, 1) As g并没有全部信息,即使我访问了PostgreSQL {{1},即使我拥有所有架构的路径,它都设置为search_path }设置为public。我如何使它成为全球性的?

2 个答案:

答案 0 :(得分:0)

您应在搜索路径中添加tiger。无需限定每个功能,它们可以位于不同的模式中……只要这些模式位于搜索路径中即可!

答案 1 :(得分:0)

好吧,对于database.php中的Laravel,需要添加schema作为数组,例如'schema' => ['$user', 'public','postgis','tiger'],