我在发送一个要在Algolia中编入索引的数组时遇到了一些困难,因为我必须对其进行编码以便首先将其保存到数据库中。
$algoliaAgent = AlgoliaAgent::firstOrCreate([
'FirstName' => $item->FirstName,
'LastName' => $item->LastName,
'AgentRecId' => $item->AgentRecId,
'Style' => json_encode(explode(',', $item->Style))
]);
$algoliaAgent->pushToIndex();
Algolia的结果索引如下:
"[\"value1\",\"value2\",\"value3\"]"
在将值发送给Algolia之前是否有解码值的方法?
答案 0 :(得分:1)
我相信您正在寻找json_encode
和json_decode
方法。
另外,请参阅Laravel Scout documenation以获取有关索引内容的更多信息。
默认情况下,给定模型的整个toArray形式将持久保存到其搜索索引。如果要自定义与搜索索引同步的数据,可以覆盖模型上的toSearchableArray方法:
答案 1 :(得分:0)
最终解决方案是修改pushToIndex()方法以拦截将对象发送到Algolia的循环。
这样的事情: 公共函数pushToIndex() { / ** @var \ AlgoliaSearch \ Laravel \ ModelHelper $ modelHelper * / $ modelHelper = App :: make(' \ AlgoliaSearch \ Laravel \ ModelHelper');
$indices = $modelHelper->getIndices($this);
/** @var \AlgoliaSearch\Index $index */
foreach ($indices as $index) {
if ($modelHelper->indexOnly($this, $index->indexName)) {
$temp = $this->getAlgoliaRecordDefault($index->indexName);
$temp['Style'] = $this->castArray($temp['Style']);
//$index->addObject($this->getAlgoliaRecordDefault($index->indexName));
$index->addObject($temp);
}
}
}
public function castArray($raw) {
$arrayString = '';
if(is_string($raw)) {
$arrayString = explode(",",$raw);
}
return $arrayString;
}