我正在使用Eloquent从数据库中获取一些数据。我的数据库有一个使用POINT
数据类型的列。列的值为POINT(52.45083 -1.930546)
。
我需要来自数据库的这些数据,然后我将其作为JSON返回。包括POINT
数据。但是,Eloquent以下列形式返回它:
array(7) {
["id"]=>
int(2)
["city_id"]=>
int(1)
["image"]=>
NULL
["name"]=>
string(20) "University of London"
["geo_coords"]=>
string(25) "ͯ���I@�h�^`V��"
["created_at"]=>
string(19) "2017-01-11 10:53:46"
["updated_at"]=>
NULL
}
为什么会这样?
答案 0 :(得分:3)
将以下代码添加到您的模型中。
protected $geofields = array('geo_coords');
然后为geo_coords添加setter和getter
<强>塞特斯强>
public function setGeoCoordsAttribute($value) {
$this->attributes['geo_coords'] = DB::raw("POINT($value)");
}
<强>吸气剂强>
public function getGeoCoordsAttribute($value) {
return str_replace(['POINT(', ')', ' '], ['', '', ','], $value);
}
现在在查询时,您将使用lat和long将值指定为简单字符串。
public function newQuery($excludeDeleted = true)
{
$raw='';
foreach($this->geofields as $column){
$raw .= ' astext('.$column.') as '.$column.' ';
}
return parent::newQuery($excludeDeleted)->addSelect('*',DB::raw($raw));
}