Как вставить 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)'))