当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL原始SQL插入(Laravel 5.5)

洪飞驰
2023-03-14

我使用Laravel创建一个简单的REST服务,将一个点几何图形和另外两个字符串值一起插入到PostgreSQL(用PostGIS扩展)表中。由于雄辩(据我所知)不支持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';
    }

}

通过请求发送的值是:

名称:Lidl

商店:便利

geom: {“type”:“Point”,“坐标”:[18.126712,42.643304],“crs”:{“type”:“name”,“properties”:{“name”:“EPSG:4326”}}}

我收到以下错误:

照明\数据库\查询异常:SQLSTATE[XX000]:内部错误:7错误:解析错误-无效几何提示:“ST”

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

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))

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

共有1个答案

堵宏毅
2023-03-14

使用DB::语句()在原始查询工作时创建原始查询。

DB::statement('your query that works');
 类似资料:
  • 问题内容: 我在控制器的函数中。 因此,从表单中,我得到了一个变量的值,说: 然后,我需要在WHERE语句中嵌入该变量(即它的值)。如果我对值进行硬编码,它将带来正确的结果,但是我已经尝试了各种方法来插入该变量而没有成功。好吧,假设我设法使用了该变量,那么我将不得不研究绑定以避免SQL注入,但是到目前为止,我要说的是,看看该变量是否可以在查询中使用。 我已经试过了,双引号,串联。$ vx。,花括号

  • 问题内容: 我有类似以下的表格(Django模型定义,并带有一个postgres数据库): 我使用Python脚本从CSV文件设置数据库。原始文件列出了具有整数id和整数“ person”字段的“所有者”,该字段映射到Person.id中的整数。 但是,鉴于Owner中的“ person”列希望使用Person对象,我该如何编写原始SQL字符串以将值插入Owner? 问题答案: 您没有说为什么需要

  • 问题内容: 我在使用SQL时遇到了一些问题。我正在尝试在表中插入2个值。 那就是我的查询:INSERT INTO tableinfo(table,date)VALUES(’Sell’,’August‘24’); 但它不起作用。我有类似的东西: 这是非常基本的,所以我不知道为什么它不起作用:( PostgreSQL 9.2.4 问题答案: 问题不是出自INSERT,而是您要发出的无效SQL。首先尝试

  • 问题内容: 我正在开发一个费用跟踪程序,在该程序中,我希望在应用程序首次启动时用一些记录填充数据库。我试图在我的启动活动中调用该方法并添加数据。但是,当我清除我的应用程序数据并第一次启动该应用程序时,会发生错误,提示没有此类列。 日志猫错误如下所示。 首次启动应用程序时,如何填充数据!只有几条记录,所以我不担心性能。 这将是一个很大的帮助! 谢谢。 数据库代码 我用来添加记录的方法 字符串值: 问

  • 在模型查询API不够用的情况下,你可以使用原始的sql语句。django提供两种方法使用原始sql进行查询:一种是使用Manager.raw()方法,进行原始查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的sql语句。 警告 编写原始的sql语句时,应该格外小心。每次使用的时候,都要确保转义了参数中的任何控制字符,以防受到sql注入攻击。更多信息请参阅防止sql注入。 进行原始查询 r

  • 问题内容: 如何将此代码转换为原始sql并在rails中使用?因为当我在heroku中部署此代码时,出现了请求超时错误。我认为如果使用原始sql会更快。 问题答案: 你可以这样做: 然后将是您可以迭代访问的数组中sql查询的结果。