问题:PostgreSQL 原始 SQL 插入 (Laravel 5.5)

我正在使用 Laravel 制作一个简单的 REST 服务,该服务将点几何图形连同其他 2 个字符串值一起插入到 PostgreSQL(使用 PostGIS 扩展)表中。由于 Eloquent(据我所知)不支持 PostGIS 函数,因此我使用的是原始 SQL 查询。

我的控制器如下所示:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Trgovina;
use Validator;

class TrgovinaController extends Controller
{
     /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {   
        $name = $request->input('name');
        $shop = $request->input('shop');
        $geom = $request->input('geom');

        $geom = "ST_TRANSFORM(ST_GeomFromGeoJSON('".$geom."'), 3857)";


        DB::insert("INSERT INTO trgovinas (name, shop, geom) VALUES (?, ?, ?)", array($name, $shop, $geom));
        return 'Insert Successful';
    }

}

通过请求发送的值是:

名称:利德尔

店铺:便利

geom: {"type":"Point","coordinates":[18.126712,42.643304],"crs":{"type":"name","properties":{"name":"EPSG:4326" }}}

我收到以下错误:

Illuminate\Database\QueryException: SQLSTATE[XX000]: Internal error: 7 ERROR: parse error - invalid geometry HINT: "ST" <-- 在几何中位置 2 处解析错误(SQL: INSERT INTO trgovinas (name, shop , geom) VALUES (Lidl, 方便, ST_TRANSFORM(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[18.126712 42.643304],"crs":{"type":"name" "properties":{"name":"EPSG:4326"}}}'), 3857))) 在文件 C:\xampp\htdocs\volonteri\vendor\laravel\framework\src\Illuminate\Database\Connection 中。第 664 行的 php

如果我在我的数据库中运行以下查询,则数据已正确插入:

INSERT INTO trgovinas (name, shop, geom) VALUES ('Lidl', 'convenience', ST_TRANSFORM(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[18.126712,42.643304],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}'), 3857))

任何调试此问题的帮助将不胜感激。与查询中的引号有关吗?有没有办法让控制器将查询作为字符串返回而不是查询数据库?这样我就可以手动运行它,看看有什么问题。

解答

使用DB::statement()进行原始查询,因为您的原始查询正在工作。

DB::statement('your query that works');
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐