我正在使用带有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字符串?预先感谢!
答案 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);