Как вставить MySQL пространственную точку с моделью YII?
У меня есть тип модели, которая была сгенерирована из таблицы MySQL, которая имеет адресные данные, а также пространственныйPOINT
поле с именем "координаты", Когда модель создается или обновляется, я хочу геокодировать адрес и сохранять координаты широты и долготы вPOINT
поле.
Насколько я понимаю, способ сделать это, чтобы геокодировать адрес в моделиbeforeSave
метод. Я сделал это, и у меня есть координаты в ассоциативном массиве. Теперь мой вопрос: как я могу вставить эти данные в мое поле координат? Это то, что яя пытаюсь:
public function beforeSave()
{
$singleLineAddress = $this->getSingleLineAddress();
$coords = Geocoder::getCoordinates($singleLineAddress);
// WORKS: using the following line works to insert POINT(0 0)
//$this->coordinates = new CDbExpression("GeomFromText('POINT(0 0)')");
// DOESN'T WORK: using the following line gives an error
$this->coordinates = new CDbExpression("GeomFromText('POINT(:lat :lng)')",
array(':lat' => $coords['lat'], ':lng' => $coords['lng'] ));
return parent::beforeSave();
}
Когда я делаю это, я получаю следующую ошибку:
CDbCommand не удалось выполнить инструкцию SQL: SQLSTATE [HY093]: недопустимый номер параметра: число связанных переменных не соответствует количеству токенов. Выполнено SQL-выражение: INSERT INTO (,,,,,,,place
city
state
name
street
postal_code
phone
created
coordinates
) ЗНАЧЕНИЯ (: yp0,: yp1,: yp2,: yp3,: yp4,: yp5, UTC_TIMESTAMP (), GeomFromText ('POINT (: lat: lng) '))