gpt4 book ai didi

php - 使用 Laravel 使用 postgis 函数插​​入

转载 作者:行者123 更新时间:2023-11-29 12:17:56 25 4
gpt4 key购买 nike

我正在尝试使用 postgis 扩展将几何图形插入到我的 postgresql 数据中。更具体地说,我想插入一个 WKT 线串。这就是我所做的:

$sql = "INSERT INTO myschema.trail (\"name\", \"description\", \"user_id\", \"location_id\", \"source_file\", \"geom\") 
VALUES ('".
$p['name']."', '".
$p['description']."', ".
\Auth::user()->user_id.", ".
$p['location_id'].", '".
'uploads/myfile'.",
ST_GeomFromText('$wkt'::text))";
\DB::insert($sql);

当我这样做时,出现错误:

SQLSTATE[42883]: Undefined function: 7 ERROR: function st_geomfromtext(text) does not exist

我首先尝试使用参数来执行此操作,但遇到了同样的问题。该错误表明生成了以下 SQL:

INSERT INTO myschema.trail ("name", "description", "user_id", "location_id", "source_file", "geom")
VALUES ('Test', 'Test', 1, 1, 'uploads/myfile', ST_GeomFromText('LINESTRING(-114.0653326549 49.2872680351, .............'))

当我复制并粘贴生成的 SQL 语句并在 pgAdmin 中运行查询时,查询执行没有问题。我曾尝试在我的应用程序中使用 postgres 用户,以防这是一个权限问题,但这没有帮助。

如果我删除查询的 postgis 部分,它在我的应用程序中运行良好。无论出于何种原因,我的 Laravel 应用程序无法使用 postgis 功能,但 pgAdmin 可以。

有没有人以前注意到过这个问题,或者对我如何解决这个问题有任何想法?谢谢

编辑

我刚才也试了下面的,我得到了同样的错误:

Trail::create([
'name' => 'test',
'description' => 'test',
'user_id' => 1,
'location' => 1,
'source_file' => 'uploads/myfile',
'geom' => \DB::raw("ST_GeomFromText('$wkt'::text)")
]);

最佳答案

看来问题出在指定架构上。在 PgAdmin 中,您似乎不需要指定 db 函数所属的架构即可使用 db 函数。在 Laravel 中,您必须为数据库函数指定架构。所以我的代码有效,但我只需要将数据库模式添加到函数中。所以这有效:

Trail::create([
'name' => 'test',
'description' => 'test',
'user_id' => 1,
'location' => 1,
'source_file' => 'uploads/myfile',
'geom' => \DB::raw("public.ST_GeomFromText('$wkt'::text)")
]);

我一直认为查询默认为公共(public)架构,但我想在这种情况下您必须定义它。

关于php - 使用 Laravel 使用 postgis 函数插​​入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com