我正在CakePHP应用程序上做一些PostGIS工作。
因为我一直在使用一些数据库函数,所以我做了原始$this->query()
调用来插入数据。我需要获取插入查询结果的 ID,但$this->query()
返回一个空数组。
这是我用于插入的查询:
INSERT INTO locations (title,company_id,state_id,poly,point)
VALUES ('$title',$company_id,$state_id,ST_GeomFromText('$geom',4269),$point);
问题是 Cake 试图将'ST_GeomFromText('$geom',4269)'
作为字符串插入,我不知道如何让它删除它通过 $this->Location->save();
准备的 SQL 插入语句中的引号。
有什么建议吗?
编辑:
在我做$this->query();
之前,我的SQL工作正常。这不是问题所在。
现在当我这样做时:
$this->Location->create();
$this->Location->set('poly',$poly);
... Set all the rest of the model fields ...
$this->Location->save();
生成的 SQL 如下所示:
INSERT INTO locations (title,company_id,state_id,poly,point)
VALUES ('Some Title',5,23,'ST_GeomFromText('$geom',4269)',POINT(-72.342,102.23455);
因为ST_GeomFromText被"引用",PostgreSQL抛出一个错误,并且没有插入几何图形。
我的问题的解决方案原来不是基于 CakePHP 的,而是 PostgreSQL 的解决方案!
通过将"返回 id"附加到查询中,如下所示:
INSERT INTO locations (title,company_id,state_id,poly,point)
VALUES ('$title',$company_id,$state_id,ST_GeomFromText('$geom',4269),$point) RETURNING id;
查询不再返回空数组,现在返回它刚刚创建的行的 ID!
通过$this->ModelName->getLastInsertID();
,您可以获得最后插入的ID。因此,保存后,您可以调用此代码以获取其 ID。