Как вставить MySQL пространственную точку с моделью YII?

У меня есть тип модели, которая была сгенерирована из таблицы MySQL, которая имеет адресные данные, а также пространственныйPOINT поле с именем & quot; координаты & quot ;. Когда модель создается или обновляется, я хочу геокодировать адрес и сохранять координаты широты и долготы в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 failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens. The SQL statement executed was: INSERT INTO place (city, state, name, street, postal_code, phone, created, coordinates) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5, UTC_TIMESTAMP(), GeomFromText('POINT(:lat :lng)'))

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

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