Как вставить 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 (,,,,,,,placecitystatenamestreetpostal_codephonecreatedcoordinates) ЗНАЧЕНИЯ (: yp0,: yp1,: yp2,: yp3,: yp4,: yp5, UTC_TIMESTAMP (), GeomFromText ('POINT (: lat: lng) '))

Ответы на вопрос(2)

Ваш ответ на вопрос