【发布时间】:2012-09-14 03:42:37
【问题描述】:
我有一个模型类型,它是从一个具有地址数据的 mysql 表和一个名为“坐标”的空间 POINT 字段生成的。创建或更新模型时,我想对地址进行地理编码并将纬度和经度坐标存储在 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 执行 SQL 语句失败:SQLSTATE[HY093]: 无效的参数号:绑定变量的数量不匹配 令牌的数量。执行的 SQL 语句是:INSERT INTO
place(city,state,name,street,postal_code,phone,created,coordinates) 值 (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5, UTC_TIMESTAMP(), GeomFromText('POINT(:lat :lng)'))
【问题讨论】:
标签: mysql yii geospatial spatial