¿Cómo inserto un punto espacial mysql con un modelo yii?
Tengo un tipo de modelo que se generó a partir de una tabla mysql que tiene datos de dirección y también un espacioPOINT
campo llamado "coordenadas". Cuando se crea o actualiza un modelo, quiero geocodificar la dirección y almacenar las coordenadas de latitud y longitud en elPOINT
campo.
Mi entendimiento es que la manera de hacer esto es geocodificar la dirección en el modelobeforeSave
método. He hecho esto y tengo las coordenadas en una matriz asociativa. Ahora mi pregunta es ¿cómo puedo insertar estos datos en mi campo de coordenadas? Esto es lo que estoy intentando:
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();
}
Cuando hago esto me sale el siguiente error:
CDbCommand no pudo ejecutar la sentencia SQL: SQLSTATE [HY093]: Número de parámetro no válido: el número de variables enlazadas no coincide con el número de tokens. La sentencia SQL ejecutada fue: INSERT INTOplace
(city
, state
, name
, street
, postal_code
, phone
, created
, coordinates
) VALORES (: yp0,: yp1,: yp2,: yp3,: yp4,: yp5, UTC_TIMESTAMP (), GeomFromText ('POINT (: lat: lng)'))