0

我正在尝试使用以下产品数据创建一个细化列表:

  1. 表 1:产品
  2. 表 2:产品详细信息。

使用 Table Product,可以完美地检索所有所需的数据,创建一个非常类似于 algolia 电子商务百思买示例的 json 文件。

{
“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 个以上的 facet 选项。

  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(): Argument #1 is not an array


更新:

解决方案是:

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

1 回答 1

2

我不确切知道您想要什么,但错误是因为您不能将数组作为 $record 的索引。应该看起来更像:$record[1] 或 $record['key']。

您是否正在寻找类似的东西:

$new_array = [];

foreach ($this->productdetails as $data) {
    $new_array[$data['name']] = $data['value'];
}
于 2018-03-18T16:06:48.487 回答