尝试保存新记录时出现地理位置错误

时间:2019-01-30 03:02:04

标签: json laravel algolia

我正在使用带有laravel的阿尔戈利亚搜索。很好,但是当我添加地理位置时,我遇到了一个问题。我在lat和lng的数据库中有字段,因此将其添加到模型中:

public function toSearchableArray()
    {
        $record = $this->toArray();

        $record['_geoloc'] = [
            'lat' => $record['latitude'],
            'lng' => $record['longitude'],
        ];

        unset($record['created_at'], $record['updated_at']); // Remove unrelevant data
        unset($record['latitude'], $record['longitude']);

        return $record;
    }

但是,当我尝试保存模型时,出现此错误:

  

_geoloc.lat或_geoloc.lng属性在第1行>列:526附近不能为空

因此,我然后在数据库中添加了一个'_geoloc字段,这是一个TEXT。 但是现在,在尝试保存模型时出现此错误:

  

AlgoliaSearch \ AlgoliaException(400)   _geoloc属性不能在第1行:606列附近包含字符串

从错误消息中:

  

$ answer = Json :: decode($ response,true);

   if (intval($http_status / 100) == 4) {
       throw new AlgoliaException(isset($answer['message']) ?     > $answer['message'] : $http_status.' error', $http_status);

这里是模型的保存:

        //gets an array of lat and lng
        //$gps is an assoc array
        //logger($geoJson) yields {"lat":34.8802845,"lng":-77.1041536}
        $gps = Map::getListingDetails($request);
        $geoJson = json_encode($gps);

        $listing = Listing::create([
                'user_id' => auth()->id(),
                '_geoloc' => $gps,               
         ]);

我是在开始还是结束时做错了什么?使用toSearchAbleArray,algolia代码是否应该能够解码保存在数据库中的json字符串?预先感谢!

1 个答案:

答案 0 :(得分:1)

您对

的使用
toSearchableArray

是执行此操作的写方法,但是模型/控制器中的关联数组键不匹配。在控制器中,您使用的是“纬度”和“经度”,但在模型中,您使用的是“纬度”和“经度”。

在模型更改中:

'lat' => $record['latitude'],
'lng' => $record['longitude'],

收件人:

'lat' => $record['lat'],
'lat' => $record['lng'],

您将无法在MySQL中存储关联数组。我建议更改:

$gps = Map::getListingDetails($request);

$input = Map::getListingDetails($request)
$gps = serialize($input);