2016-09-30 54 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; 
}