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

3
我有一个模型类型,是从包含地址数据和空间POINT字段(名为“coordinates”)的mysql表生成的。当创建或更新模型时,我希望对地址进行地理编码,并将纬度和经度坐标存储在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) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5,UTC_TIMESTAMP(),GeomFromText('POINT(:lat:lng)'))
2个回答

5

如果您正在使用 Yii 2,请对 @dlnGd0nG 的回答进行微小的编辑。

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

4
尝试使用这个替代方案。
 $this->coordinates = new CDbExpression("GeomFromText(:point)",
        array(':point'=>'POINT('.$coords['lat'].' '.$coords['lng'].')'));

抱歉,我应该提到我已经尝试过这个方法,但是它给出了相同的错误。 - User
实际上我错了,这个可以用。我尝试了很多变化,以为已经试过这个了。 - User

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接