Como faço para inserir um ponto espacial mysql com um modelo yii?
Eu tenho um tipo de modelo que foi gerado a partir de uma tabela mysql que tem dados de endereço e também um espaçoPOINT
campo chamado "coordenadas". Quando um modelo é criado ou atualizado, quero geocodificar o endereço e armazenar as coordenadas de latitude e longitude noPOINT
campo.
Minha compreensão é que a maneira de fazer isso é geocodificar o endereço no modelo debeforeSave
método. Eu fiz isso e tenho as coordenadas em um array associativo. Agora minha pergunta é como posso inserir esses dados no meu campo de coordenadas? É isso que estou tentando:
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();
}
Quando faço isso, recebo o seguinte erro:
CDbCommand falhou ao executar a instrução SQL: SQLSTATE [HY093]: Número do parâmetro inválido: o número de variáveis ligadas não corresponde ao número de tokens. A instrução SQL executada foi: INSERT INTOplace
(city
, state
, name
, street
, postal_code
, phone
, created
, coordinates
) VALORES (: yp0,: yp1,: yp2,: yp3,: yp4,: yp5, UTC_TIMESTAMP (), GeomFromText ('POINT (: lat: lng)'))