Postgresql Yii使用PostGis,选择经度和纬度
在我的应用程序中,我将Yii与PostgreSQL和PostGIS一起使用。我有一个带有字段“位置”的模型“用户”。位置字段的内容对人类来说毫无意义,但Postgres可以使用ST_asText-method将位置字段的值转换为经度和纬度。我在模型中为经度和纬度创建了虚拟字段。保存模型时,我使用beforeSave和afterSave方法将位置设置为正确的值 我现在的问题是,我希望在创建模型时(使用数据库中的现有对象)填充纬度和经度虚拟字段。我在想,可能有beforeSelect和afterSelect这样的东西,我可以使用它们在查询后附加一个额外的计算列,从而能够在查询运行后处理从该额外列返回的值Postgresql Yii使用PostGis,选择经度和纬度,postgresql,yii,postgis,Postgresql,Yii,Postgis,在我的应用程序中,我将Yii与PostgreSQL和PostGIS一起使用。我有一个带有字段“位置”的模型“用户”。位置字段的内容对人类来说毫无意义,但Postgres可以使用ST_asText-method将位置字段的值转换为经度和纬度。我在模型中为经度和纬度创建了虚拟字段。保存模型时,我使用beforeSave和afterSave方法将位置设置为正确的值 我现在的问题是,我希望在创建模型时(使用数据库中的现有对象)填充纬度和经度虚拟字段。我在想,可能有beforeSelect和afterSe
这有可能吗?我能很容易地解决这个问题。我在CActiveRecord类中寻找beforeSelect和afterSelect方法,而我本应该寻找beforeFind和afterFind 我是这样做的。欢迎提出任何改进建议:)
我能很容易地解决这个问题。我在CActiveRecord类中寻找beforeSelect和afterSelect方法,而我本应该寻找beforeFind和afterFind 我是这样做的。欢迎提出任何改进建议:)
我在Yii2遇到了这个问题,下面是我如何解决它的
find()
方法并定义自己的ActiveQuery
类:
public static function find()
{
$query = new MyActiveQueryClass(get_called_class());
return $query->select('*, ST_AsGeoJSON(location) AS location');
}
afterFind()
中,您将获得geo json,并使用它可以获得lat/lng:
public function afterFind()
{
parent::afterFind();
$geoJson = json_decode($this->location, true);
$this->lat = $geoJson['coordinates'][0];
$this->lng = $geoJson['coordinates'][1];
}
public function beforeSave($insert)
{
//create field as expression
if(!empty($this->lat) && !empty($this->lng))
$this->location = new \yii\db\Expression("'POINT({$this->lat} {$this->lng})'");
return parent::beforeSave($insert);
}
我在Yii2遇到了这个问题,下面是我如何解决它的
find()
方法并定义自己的ActiveQuery
类:
public static function find()
{
$query = new MyActiveQueryClass(get_called_class());
return $query->select('*, ST_AsGeoJSON(location) AS location');
}
afterFind()
中,您将获得geo json,并使用它可以获得lat/lng:
public function afterFind()
{
parent::afterFind();
$geoJson = json_decode($this->location, true);
$this->lat = $geoJson['coordinates'][0];
$this->lng = $geoJson['coordinates'][1];
}
public function beforeSave($insert)
{
//create field as expression
if(!empty($this->lat) && !empty($this->lng))
$this->location = new \yii\db\Expression("'POINT({$this->lat} {$this->lng})'");
return parent::beforeSave($insert);
}