我要如何插入一个警予模型MySQL的空间呢?(How do I insert a mysql spa

2019-07-31 19: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 placecitystatenamestreetpostal_codephonecreatedcoordinates )VALUES(:YP0,:YP1,:YP2,:YP3,:YP4,:yp5,UTC_TIMESTAMP() GeomFromText( 'POINT(:纬度:LNG)'))

Answer 1:

试试这个

 $this->coordinates = new CDbExpression("GeomFromText(:point)",
        array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));


Answer 2:

小编辑在@ dlnGd0nG的答案,如果你正在使用Yii 2

$this->coordinates = new yii\db\Expression("GeomFromText(:point)",
    array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));


文章来源: How do I insert a mysql spatial point with a yii model?