Laravel雄辩的后期处理查询

时间:2016-12-21 17:17:39

标签: php postgresql laravel postgis

我正在使用PostgreSQL + PostGIS设置,我想从数据库中获取geom列作为GeoJSON。我知道我可以使用ST_AsGeoJSON()函数来做到这一点。所以我使用此代码来获取所有国家/地区:

$countries = Country::select(["id", "name", DB::raw("ST_AsGeoJSON(geom) AS geom")])->get()

但是,我最终将$countries[i]->geom作为一个字符串,所以我需要for循环来执行此操作:

$countries[i]->geom = json_decode($countries[i]->geom);

我想将这行代码移到Eloquent模型中,所以如果我忘记解码列,我不必担心。是否有一种方法我应该覆盖或以任何方式将这种特殊功能添加到我的国家模型中?

2 个答案:

答案 0 :(得分:2)

将以下内容添加到模型中

protected $casts = [
    'geom' => 'array',
];

https://laravel.com/docs/5.3/eloquent-mutators#array-and-json-casting

答案 1 :(得分:1)

您可以使用mutator / accessor覆盖或解码模型中的值。因此,在您的模型中,请执行以下操作。

public function getGeomAttribute()
{
   return json_decode($this->attributes['geom']);
}

通过这种方式,您可以在应用程序的不同部分访问geom而无需对其进行解码。