Я работаю над PostGIS над приложением CakePHP.
Поскольку я работал с некоторыми функциями базы данных, я сделал вызовы raw $this->query()
для вставки данных. Я нахожусь в точке, где мне нужно получить идентификатор результата запроса на вставку, но $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 insert, которую он готовит через $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 получает 'quoted', PostgreSQL выдает ошибку и не вставляет геометрию.
Решение моей проблемы оказалось НЕ ТОЛЬКО на основе CakePHP, но PostgreSQL!
Добавив «RETURNING id» к запросу, например:
INSERT INTO locations (title,company_id,state_id,poly,point) VALUES ('$title',$company_id,$state_id,ST_GeomFromText('$geom',4269),$point) RETURNING id;
Запрос больше не возвращает пустой массив и теперь возвращает идентификатор только что созданной строки!
Через $this->ModelName->getLastInsertID();
вы можете получить последний вставленный идентификатор. Итак, после сохранения вы можете вызвать этот код, чтобы получить его идентификатор.