fix: GetGoodsViewData 使用 SPEC_DIMS 顺序推断维度,不再依赖 type 字段

pull/19/head
Council 2026-04-21 12:45:50 +08:00
parent 416fe0a067
commit 4683862688
1 changed files with 12 additions and 4 deletions

View File

@ -510,18 +510,26 @@ class SeatSkuService extends BaseService
return $seatSpecMap; return $seatSpecMap;
} }
// 2. 查询每个 spec_base_id 对应的 4 维 GoodsSpecValue // 2. 查询每个 spec_base_id 对应的 GoodsSpecValue
$specBaseIds = array_column($specs, 'id'); $specBaseIds = array_column($specs, 'id');
$specValues = \think\facade\Db::name('GoodsSpecValue') $specValues = \think\facade\Db::name('GoodsSpecValue')
->whereIn('goods_spec_base_id', $specBaseIds) ->whereIn('goods_spec_base_id', $specBaseIds)
->order('id', 'asc') // 按插入顺序,确保维度顺序一致
->select() ->select()
->toArray(); ->toArray();
// 3. 按 spec_base_id 分组,构建 4 维 spec 数组 // 3. 按 spec_base_id 分组,按 SPEC_DIMS 顺序映射维度
// 不依赖 type 字段,而是按插入顺序匹配 SPEC_DIMS
$specByBaseId = []; $specByBaseId = [];
foreach ($specValues as $sv) { foreach ($specValues as $sv) {
$specByBaseId[$sv['goods_spec_base_id']][] = [ $baseId = $sv['goods_spec_base_id'];
'type' => $sv['type'] ?? '', if (!isset($specByBaseId[$baseId])) {
$specByBaseId[$baseId] = [];
}
$idx = count($specByBaseId[$baseId]); // 当前维度索引
$dimName = self::SPEC_DIMS[$idx] ?? ('dim_' . $idx);
$specByBaseId[$baseId][] = [
'type' => $dimName, // 使用 SPEC_DIMS 顺序推断维度名
'value' => $sv['value'] ?? '', 'value' => $sv['value'] ?? '',
]; ];
} }