我在使用 saveAll() 在 CakePHP 中保存空间数据时遇到问题。我真的不想手动编写查询(在 CakePHP 中处理空间数据 https://stackoverflow.com/questions/4598834/handling-spatial-data-in-cakephp)因为有许多模型被保存。
我也读过这个CakePHP 和 MySQL 空间扩展 http://muxe.org/blog/cakephp-and-mysql-spatial-extension但当我尝试做同样的事情时$db->expression()
返回一个 stdClass。
这是打印出来的返回对象:
stdClass Object
(
[type] => expression
[value] => GeomFromText('POINT(48.18879 18.527579999999944)')
)
如果我按照使用该对象的方式使用该对象CakePHP 和 MySQL 空间扩展 http://muxe.org/blog/cakephp-and-mysql-spatial-extension并尝试使用 saveAll() 保存它,我收到此错误:
Error: 不能将 stdClass 类型的对象用作数组
文件:/www/s/t/u47728/public_html/lib/Cake/Model/Model.php
线路:2221
如果我使用 value 属性,它会在查询中被转义,因此它只是一个字符串。然后我得到这个错误:
Error:SQLSTATE[22003]:数值超出范围:1416 无法从发送到 GEOMETRY 字段的数据中获取几何对象
saveAll() 支持表达式吗?
UPDATE
显然这同样适用于 save() 函数和其他函数......还有 saveField()
转换这一行:
$this->data['Report']['position'] = $db->expression("GeomFromText('POINT(" .
$this->data['Report']['lat'] . " " . $this->data['Report']['lng'] . ")')");
to :
$this->data['Report']['position'] = (object) $db->expression("GeomFromText('POINT(" .
$this->data['Report']['lat'] . " " . $this->data['Report']['lng'] . ")')");
它应该有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)