yii1.0 mysql视图存储,如何在yii模型中插入mysql空间点?

I have a model type that was generated from a mysql table that has address data and also a spatial POINT field named "coordinates". When a model is created or updated I want to geocode the address and store the latitude and longitude coordinates in the POINT field.

My understanding is the way to do this is to geocode the address in the model's beforeSave method. I have done this and have the coordinates in an associative array. Now my question is how can I insert this data into my coordinates field? This is what I'm trying:

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();

}

When I do this I get the following error:

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)'))

解决方案

Try this instead

$this->coordinates = new CDbExpression("GeomFromText(:point)",

array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值