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

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。首先尝试

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

  • 问题内容: 我知道有一条SQL命令是这样的:,但是由于Android的类有一些不错的方法,我想知道是否可以通过方法插入不存在的值。 目前,我正在用它来插入一个: (是的一个实例。) 我尝试了该方法,而不是,但它似乎与相同。也就是说,如果该值已在行中,则将其再次插入,因此该行现在具有两个具有相同值的值。 问题答案: SQLiteDatabase:仅在值不存在时插入(不通过原始SQL命令) 由于您不想

  • 问题内容: 我需要将大量数据上传到MySQL数据库。对于大多数模型,我使用django的ORM,但是我的一个模型将具有数十亿(!)个实例,并且我想优化其插入操作。 我似乎找不到找到使executemany()工作的方法,并且在进行谷歌搜索之后,似乎几乎没有示例了。 我正在寻找正确的sql语法+正确的命令语法+正确的值数据结构以支持以下sql语句的executemany命令: 是的,我明确指出了ID