Php Laravel雄辩的后处理查询

Php Laravel雄辩的后处理查询,php,postgresql,laravel,postgis,Php,Postgresql,Laravel,Postgis,我正在使用PostgreSQL+PostGIS设置,我想从数据库中获取geom列作为GeoJSON。我知道我可以使用ST_AsGeoJSON函数实现这一点。因此,我使用此代码获取所有国家: $countries=Country::选择[id,name,DB::rawST_AsGeoJSONgeom AS geom]->get 然而,我最终将$countries[I]>geom作为一个字符串,因此我需要使用for循环来执行此操作: $countries[i]>geom=json_解码$countr

我正在使用PostgreSQL+PostGIS设置,我想从数据库中获取geom列作为GeoJSON。我知道我可以使用ST_AsGeoJSON函数实现这一点。因此,我使用此代码获取所有国家:

$countries=Country::选择[id,name,DB::rawST_AsGeoJSONgeom AS geom]->get

然而,我最终将$countries[I]>geom作为一个字符串,因此我需要使用for循环来执行此操作:

$countries[i]>geom=json_解码$countries[i]>geom


我想把这行代码移到雄辩的模型中,这样我就不必担心我是否忘记解码列了。是否有一种我应该覆盖的方法或任何方式将此特殊功能添加到我的国家/地区模型中?

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

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

使用此功能,您可以在应用程序的不同部分访问geom,而无需对其进行解码。

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

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

但在大规模的情况下,每次解码都不是效率很低吗。我可以创建一些私有变量来检查它是否已经解码并返回该值……我使用的是5.1 LTS版本,但这是可行的,同时使用'geom'=>'json'也可以实现这一点。但是,我检查了laravel代码,每次我请求这个属性时,它实际上都会进行json_解码。。。如果我记得解码的值,来自oseintow的答案是好的。