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

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

  1. Таблица 1: Продукт
  2. Таблица 2: Детали продукта.

С помощью Table Product все необходимые данные извлекаются идеально, создавая файл json, очень похожий на пример Best Buy в электронной коммерции 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

Как видите, один продукт может отображать более 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.


Основываясь на подходе user @ 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;
}

0

Решение

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

Вы ищете что-то подобное:

$new_array = [];

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]