首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用yii模型插入mysql空间点?

如何使用yii模型插入mysql空间点?
EN

Stack Overflow用户
提问于 2012-09-21 17:24:52
回答 2查看 2.3K关注 0票数 3

我有一个模型类型,它是从一个具有地址数据的mysql表和一个名为“坐标”的空间POINT字段生成的。创建或更新模型时,我希望对地址进行地理编码,并将纬度和经度坐标存储在POINT字段中。

我的理解是,这样做的方法是在模型的beforeSave方法中对地址进行地理编码。我已经这样做了,并有一个关联数组中的坐标。现在我的问题是如何将这些数据插入坐标字段?这就是我想要的:

代码语言:javascript
运行
复制
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语句: SQLSTATEHY093:无效的参数号:绑定变量的数量与令牌数目不匹配。执行的SQL语句是: INSERT INSERT place (citystatenamestreetpostal_codephonecreatedcoordinates)值(:yp0,:yp1,:yp2,:yp3,:yp4,:yp5,UTC_TIMESTAMP(),GeomFromText('POINT(:lat :lng)“)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-21 19:30:16

试一试这个

代码语言:javascript
运行
复制
 $this->coordinates = new CDbExpression("GeomFromText(:point)",
        array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));
票数 4
EN

Stack Overflow用户

发布于 2015-08-02 08:02:06

如果您使用的是Yii 2,请在@dinGd0nG的回答中进行小编辑。

代码语言:javascript
运行
复制
$this->coordinates = new yii\db\Expression("GeomFromText(:point)",
    array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12535245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档