Use*_*ser 3 mysql spatial geospatial yii
我有一个从 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();
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误:
CDbCommand 无法执行 SQL 语句:SQLSTATE[HY093]:参数数量无效:绑定变量数量与标记数量不匹配。执行的 SQL 语句为: INSERT INTO
place(city,state, , , , , ,name)streetVALUESpostal_code(phone: yp0, :yp1, :yp2, :yp3, :yp4, :yp5, UTC_TIMESTAMP(), GeomFromText('POINT(:lat :lng) )'))createdcoordinates
如果您使用的是Yii 2,请对 @dlnGd0nG 的答案进行小编辑
$this->coordinates = new yii\db\Expression("GeomFromText(:point)",
array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2443 次 |
| 最近记录: |