如何获取定制化产品订单中lineItems.product的productNumber
解决定制订单无法获取productNumber的问题
针对customized-products类型订单拿不到productNumber的问题,核心是你没关联到定制产品对应的扩展实体。结合你提到的productOswag_customized_products_templateptions扩展,按以下步骤修改:
1. 添加正确的关联路径
在你的查询条件里,新增定制产品扩展的关联;若需要获取模板产品的productNumber,还要关联到模板产品实体:
$this->context = $context; $criteria = new Criteria([$orderId]); $criteria->addAssociation(OrderExtension::DSM_INTEGRATION_ORDER); $criteria->addAssociation('addresses'); $criteria->addAssociation('billingAddress.country'); $criteria->addAssociation('transactions.paymentMethod'); $criteria->addAssociation('deliveries.shippingMethod'); $criteria->addAssociation('deliveries.shippingOrderAddress.country'); $criteria->addAssociation('lineItems.product'); $criteria->addAssociation('lineItems.product.tags'); $criteria->addAssociation('lineItems.product.options'); $criteria->addAssociation('orderCustomer.customer'); // 新增定制产品扩展关联 $criteria->addAssociation('lineItems.product.extensions.oswag_customized_products_templateptions'); // 若需要模板产品的productNumber,添加此关联 $criteria->addAssociation('lineItems.product.extensions.oswag_customized_products_templateptions.templateProduct'); $result = $this->orderRepository->search($criteria, $context);
2. 获取productNumber的逻辑
处理订单行项目时,判断产品类型为customized-products后,从扩展字段里提取productNumber:
foreach ($result->first()->getLineItems() as $lineItem) { $product = $lineItem->getProduct(); if ($product->getType() === 'customized-products') { // 获取定制产品扩展实体 $customizedExtension = $product->getExtension('oswag_customized_products_templateptions'); // 从模板产品中取productNumber(根据实际字段调整) $productNumber = $customizedExtension->getTemplateProduct()->getProductNumber(); // 如果扩展实体自身直接存储productNumber,用下面这行 // $productNumber = $customizedExtension->getProductNumber(); } else { // 普通产品直接取productNumber $productNumber = $product->getProductNumber(); } }
内容的提问来源于stack exchange,提问作者Ifnir
相关产品推荐
相关产品推荐

