2013-02-15 52 views
1

我在我的應用程序中使用Yii和PostgreSQL和PostGIS。我有一個模型「用戶」字段「位置」。位置字段的內容對於人類來說沒有任何意義,但Postgres可以使用ST_asText方法轉換位置字段的值並將其轉換爲經度和緯度。我在我的模型中創建了經度和緯度的虛擬域。當我保存模型時,我使用beforeSave和afterSave方法將位置設置爲正確的值。Yii與PostGis,選擇經度和緯度

我現在的問題是,我想經緯度虛擬字段填充模型創建(與數據庫中的現有對象)。我在想,可能會有像beforeSelect和afterSelect這樣的東西,我可以用一個額外的計算列追加查詢,因此能夠處理查詢運行後從該額外列返回的值。

這是可能以某種方式?

回答

0

我能夠解決這個很容易。我一直在尋找beforeFind和afterFind時,在CActiveRecord類中尋找beforeSelect和afterSelect方法。

下面是我做到這一點。歡迎任何改進建議:)

public function beforeFind(){ 
    $criteria = new CDbCriteria; 
    $criteria->select = "*,ST_asText(location) as location"; 
    $this->dbCriteria->mergeWith($criteria); 
    return parent::beforeFind(); 
} 

public function afterFind(){ 
    $location = str_replace('POINT(','',$this->location); 
    $location = str_replace(')','',$location); 
    $location = explode(" ", $location); 

    $this->lon = $location[0]; 
    $this->lat = $location[1]; 
    return parent::afterFind(); 
}