1

我在 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)'作为字符串插入,我不知道如何让它删除它准备的 SQL 插入语句中的引号$this->Location->save();

有什么建议么?

编辑:

在我做之前$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 抛出一个错误并且不插入几何。

4

2 回答 2

1

我的问题的解决方案不是基于 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!

于 2013-09-10T20:20:41.727 回答
0

通过$this->ModelName->getLastInsertID();您可以获得最后插入的 ID。因此,在保存后,您可以调用此代码来获取其 ID。

于 2015-01-17T16:42:50.030 回答