Eloquent将POINT数据返回为UTF8

时间:2017-02-01 21:25:25

标签: php mysql laravel eloquent

我正在使用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
  }

为什么会这样?

1 个答案:

答案 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));
}