我正在尝试使用以下产品数据创建一个细化列表:
- 表 1:产品
- 表 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 选项。
- 操作系统
- 语音激活
- 处理器速度
但我不知道如何构造该数据以创建这样的细化列表:
例如,我如何创建 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;
}