3

我有一个模型类型,它是从一个具有地址数据的 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]: Invalid parameter number: 绑定变量数与标记数不匹配。执行的 SQL 语句为: 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 )'))

4

2 回答 2

4

试试这个

 $this->coordinates = new CDbExpression("GeomFromText(:point)",
        array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));
于 2012-09-21T19:30:16.977 回答
4

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

$this->coordinates = new yii\db\Expression("GeomFromText(:point)",
    array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));
于 2015-08-02T08:02:06.353 回答