У меня проблема с сохранением пространственных данных в CakePHP с помощью saveAll (). Я действительно не хочу писать запрос вручную ( обработка пространственных данных в CakePHP ), поскольку количество сохраняемых моделей.
Также я прочитал этот CakePHP и MySQL Spatial Extension, но когда я попытаюсь сделать то же самое, $db->expression()
возвращает stdClass.
Это распечатанный объект:
stdClass Object ( [type] => expression [value] => GeomFromText('POINT(48.18879 18.527579999999944)') )
Если я использую этот объект так, как он используется в CakePHP и MySQL Spatial Extension и пытается сохранить его с помощью saveAll (), я получаю эту ошибку:
Ошибка : нельзя использовать объект типа stdClass как массив
Файл: /www/s/t/u47728/public_html/lib/Cake/Model/Model.php
Линия: 2221
Если я использую свойство value, он получает escape-код в запросе, поэтому он становится просто строкой. Затем я получаю эту ошибку:
Ошибка : SQLSTATE [22003]: числовое значение вне диапазона: 1416 Не удается получить объект геометрии из данных, отправляемых в поле GEOMETRY
Поддерживает ли saveAll () суждение выражения?
ОБНОВИТЬ
Очевидно, то же самое относится к функции 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 (широта долготы)
Не могу прокомментировать правильный ответ, поскольку у меня недостаточно репутации.