提问者:小点点

用CakePHP保存空间数据


我有一个问题保存空间数据在CakePHP与SaveAll().我真的不想手动编写查询(在CakePHP中处理空间数据),因为有许多模型被保存。

我也读过这个CakePHP和MySQL空间扩展,但是当我尝试做同样的事情时,$db-

这是打印出来的返回对象:

stdClass Object
(
    [type] => expression
    [value] => GeomFromText('POINT(48.18879 18.527579999999944)')
)

如果我以CakePHP和MySQL Spatial Extension中使用的方式使用此对象,并尝试使用saveAll()保存它,则会出现以下错误:

错误:无法使用stdClass类型的对象作为数组
File: /www/s/t/u47728/public_html/lib/Cake/Model/Model.php
Line: 2221

如果我使用value属性,它将在查询中转义,因此它将变成一个字符串。然后我得到这个错误:

错误:SQLSTATE[22003]:数值超出范围:1416无法从发送到GEOMETRY字段的数据中获取几何对象

saveAll()支持表达式吗?

使现代化

显然,save()函数和其他函数也是如此。。。。还包括saveField()


共2个答案

匿名用户

转换此行:

$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'] . ")')");

它应该工作。

匿名用户

您还应该更改数据的顺序。

正确的方法是:点(经纬度)

无法对正确答案发表评论,因为我没有足够的声誉。