我使用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以字符串的形式返回查询,而不是查询数据库?这样,我可以手动运行它,看看有什么问题。
使用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查询的结果。