Алголия: как создать уточняющий список со следующими данными

Я пытаюсь создать список уточнений со следующими данными о продукте:

  1. Таблица 1: Продукт
  2. Таблица 2: Сведения о продукте.

С Table Product все необходимые данные извлекаются идеально, создавая файл json, очень похожий на пример лучшей покупки электронной коммерции algolia.

{
“id”: "3953367"
“name”: “360fly - Panoramic 360° HD Video Camera - Black”,
“popularity”: 9999,
“rating”: 5,
“objectID”: “9131042”
},

С другой стороны, Таблица 2 -> Сведения о продукте имеет следующую структуру:

id - productId - name - value.
1 - 3953367 - Operating System - Android 4.4 KitKat
2 - 3953367 - Voice Activated - Yes
3 - 3953367 - Processor Speed - 1.2 gigahertz

Как видите, 1 отдельный продукт может отображать более 3 вариантов фасета.

  1. Операционная система
  2. Голосовая активация
  3. Скорость процессора

Но я не знаю, как структурировать эти данные, чтобы создать список уточнений, подобный этому:

введите здесь описание изображения

В качестве примера, как я могу создать json, чтобы люди могли совершенствоваться с помощью операционной системы.

Я пробовал что-то вроде:

$record[$this->productdetails->map(function($data) {return [$data[‘name’]];})->toArray()]
= 
$this->productdetails->map(function($data) {return [$data[‘value’]]; })->toArray();

но в этом примере я получаю сообщение об ошибке:

Недопустимый тип смещения

Любой пример приветствуется. Я использую Laravel Scout с Algolia.


Основываясь на подходе пользователя @daniel-h, я обновил свой код.

public function toSearchableArray()
{
    $record['name'] = $this->productName;
    $record['description'] = $this->productSpecification;
    $record['brand'] = $this->productBrand;
    $record['color'] = $this->color;
    $new_array = [];

    foreach ($this->productdetails as $record) {
        $new_array[$record['name']] = $record['value'];
    }
    return $record;
}

В настоящее время я получаю array_merge(): аргумент № 1 не является массивом


ОБНОВИТЬ:

решение было:

// Add the product details to the array
    foreach ($this->productDetails as $detailsRecord) {
      $record[$detailsRecord->name] = $detailsRecord->value;
    }

person s_h    schedule 18.03.2018    source источник
comment
Я не уверен, где находится array_merge?   -  person Julien Bourdeau    schedule 19.03.2018
comment
Движок @JulienBourdeau algolia для laravel отображает следующую строку кода: return array_merge(['objectID' => $model->getKey()], $array);   -  person s_h    schedule 19.03.2018
comment
О да, я вижу :)   -  person Julien Bourdeau    schedule 20.03.2018


Ответы (1)


Я не знаю точно, что вы хотите, но ошибка в том, что вы не можете указать массив в качестве индекса для записи $. Должно выглядеть примерно так: $record[1] или $record['key'].

Вы ищете что-то вроде этого:

$new_array = [];

foreach ($this->productdetails as $data) {
    $new_array[$data['name']] = $data['value'];
}
person Daniel H    schedule 18.03.2018
comment
отличный подход, но по какой-то причине мой код отображает ошибку array_merge(): Argument #1 is not a array . Я обновил свой вопрос полным кодом TosearchableArray. любая помощь оценена!. - person s_h; 18.03.2018