2016-09-30 52 views
0

我在Algolia发送一个数组需要索引时遇到了一些困难,因为我必须先编码它才能将其保存到数据库中。通过Algolia的Laravel搜索框架发送数组索引

$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

使用Laravel 5.2 –

回答

0

我相信你正在寻找json_encodejson_decode方法。

另请参阅Laravel Scout documenation以获取有关索引内容的更多信息。

默认情况下,给定模型的整个toArray格式将被保存到其搜索索引中。如果你想自定义同步于搜索索引的数据,则可能会覆盖在模型上toSearchableArray方法:

+0

谢谢埃里克,但我仍然在5.2。但是你的回答让我想到修改源代码中的pushToIndex方法。 –

+0

噢,没关系,你遇到了什么问题?额外的转义字符是您所指的问题吗?或者因为它不是一个关联数组? –

+0

这是我得到的错误,如果我没有编码:ErrorException preg_replace():参数不匹配,模式是一个字符串,而替换是一个数组。不,它不是一个关联数组。 –

0

最终溶液是修改pushToIndex()方法来截取发送所述环路对象是Algolia。

事情是这样的: 公共职能pushToIndex(){ /** @var \ AlgoliaSearch \ Laravel \ ModelHelper $ modelHelper */ $ modelHelper =应用::让( '\ 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; 
}