我有一个问题保存空间数据在CakePHP与saveAll()。我真的不想手动编写查询(在CakePHP中处理空间数据),因为有许多模型被保存。
我也读了这个CakePHP和MySQL空间扩展,但当我尝试做同样的事情时,$db->expression()
返回一个stdClass。
这是打印出来的返回对象:
stdClass Object
(
[type] => expression
[value] => GeomFromText('POINT(48.18879 18.527579999999944)')
)
如果我使用这个对象,它是在CakePHP和MySQL空间扩展使用的方式,并试图保存它与saveAll()我得到这个错误:
错误:不能使用stdClass类型的对象作为数组
文件:/www/s/t/u47728/public_html/lib/Cake/Model/Model.php
线:2221
如果我使用value属性,它在查询中被转义,所以它变成了一个字符串。然后我得到这个错误:
错误: SQLSTATE[22003]: Numeric value out of range: 1416无法从发送到geometry字段的数据中获取几何对象
是否支持表达式?
显然同样适用于save()函数和其他....还saveField ()
转换这一行:
$this->data['Report']['position'] = $db->expression("GeomFromText('POINT(" .
$this->data['Report']['lat'] . " " . $this->data['Report']['lng'] . ")')");
:
$this->data['Report']['position'] = (object) $db->expression("GeomFromText('POINT(" .
$this->data['Report']['lat'] . " " . $this->data['Report']['lng'] . ")')");
您还应该更改数据的顺序。
正确的方法是:POINT(经纬度)
不能评论正确答案,因为我的名气不够。