2016-03-03 2 views
3

Я хочу обновить запись elasticsearch. Я передаю всю запись в $ data в elasticsearch для обновления.Обновление записей в elasticsearch-laravel;

Обновить код:

public function updateEs($data) 
    { 
     $params = array(); 
     $params['index'] = \App::environment(); 
     $params['type'] = $data['context']; 
     $model = new \Modules\Catalog\Repositories\ProductRepo; 

     $form = $model->loadProduct($data['id']);// whole data come from database 
     $data=(object)$form; //array to object 

      $data['body'] = $data; 
      $data['index'] = 'my_index'; 
      $data['type'] = 'product'; 
      $data['id' ]= $data['id']; 

     $response = \Es::update($data); 
    } 

Но я получаю ERROR:

FatalErrorException в ElasticSearchHelper.php линии 121:

Невозможно использовать объект типа StdClass как массив

ответ

0

Вы подали $form на номер stdClass с номером (object). Затем вы обрабатываете его как array, делая $data['stuff']. Для того, чтобы решить эту ошибку, вы должны сделать, например:

$data->body = $data; 

Я не знаю, если это единственная ошибка, и если ваш ES будет работать сейчас, но он должен решить эту ошибку, Вы упоминаете.

+0

Спасибо, сэр, я хочу знать одну вещь, могу ли я передать всю запись при обновлении записи elasticsearch? –

+0

В приведенном выше примере $ form - массив, который я преобразовываю в объект в $ data = (object) $ form; нужно ли мне ? –

+0

Это зависит от того, будет ли ES :: update() ожидать массив или объект (я не знаю, какая функция вызвала ошибку) –

Смежные вопросы