通过Algolia的Laravel Search Framework发送数组到索引

时间:2016-09-30 14:25:55

标签: laravel algolia

我在发送一个要在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之前是否有解码值的方法?

2 个答案:

答案 0 :(得分:1)

我相信您正在寻找json_encodejson_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;
}