Laravel 的 eloquent post 正在处理查询

Laravel's eloquent post-processing query

我正在使用 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 模型中,这样我就不必担心是否忘记解码列。有没有我应该覆盖的方法或任何方法可以将此特殊功能添加到我的国家/地区模型?

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

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

有了它,您可以在应用程序的不同部分访问 geom,而无需对其进行解码。

将以下内容添加到您的模型中

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

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