Я пытаюсь создать Перечень уточнений со следующими данными о продукте:
С помощью 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-х вариантов для фасета.
Но я не знаю, как структурировать эти данные, чтобы создать такой список уточнений:
В качестве примера, как я могу создать 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;
}
Я не знаю точно, что вы хотите, но ошибка в том, что вы не можете дать массив в качестве индекса для $ записи. Должно выглядеть примерно так: $ record [1] или $ record [‘key’].
Вы ищете что-то подобное:
$new_array = [];
foreach ($this->productdetails as $data) {
$new_array[$data['name']] = $data['value'];
}
Других решений пока нет …