You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取产品滑块的计算后价格?Sales Channel Product Repository返回Null

问题:产品滑块获取计算后价格返回Null

需求是实现一个产品滑块,能针对不同客户、税费场景展示计算后的产品价格,但使用Sales Channel Product Repository时返回结果为Null。

相关代码

页面加载事件处理函数

public function onPageLoaded(PageLoadedEvent $event): void
{
    $context = $event->getContext();
    $salesChannelContext = $event->getSalesChannelContext();

    $page = $event->getPage();

    if (str_contains($event->getRequest()->getRequestUri(), '/link')) {
        $parts = explode("/link/", $event->getRequest()->getRequestUri());
        $toolId = $this->getToolIdBySlug($parts[1], $context);

        if ($toolId) {
            $toolsProducts = $this->getToolsProductByToolId($toolId, $context);
            $tools = [];
            $foo = [];
            foreach ($toolsProduct as $tool) { // 变量名拼写错误:应为$toolsProducts
                $tools[] = $tool->getProduct();
                $foo[] = $this->getSalesChannelProductById($tool->getProduct()->getId(), $salesChannelContext);

            }

            dd($foo); // 返回NULL
        }
    }
}

根据ToolId关联产品查询函数

protected function getToolsProductByToolId(string $toolId, Context $context): array
{
    $criteria = new Criteria();
    $criteria->addFilter(new EqualsFilter('toolId', $recipeId)); // 变量名错误:应为$toolId
    $criteria->addAssociation('product');
    $criteria->addAssociation('product.cover');


    return $this->productToolRepository->search($criteria, $context)->getElements();
}

销售渠道产品查询函数

protected function getSalesChannelProductById(string $productId, SalesChannelContext $salesChannelContext): ?SalesChannelProductEntity
{
    /** @var SalesChannelProductEntity|null $salesChannelProduct */
    $salesChannelProduct = $this->salesChannelProductRepository
        ->search(new Criteria([$productId]), $salesChannelContext)
        ->first();

    return $salesChannelProduct;
}

排查与解决步骤

  1. 修复变量拼写错误

    • getToolsProductByToolId中,EqualsFilter的第二个参数误用了未定义的$recipeId,应改为传入的$toolId,否则查询不到任何关联产品。
    • onPageLoaded函数的循环中,遍历变量写成了$toolsProduct,实际应为$toolsProducts,这会导致循环不执行,$foo始终为空数组。
  2. 验证销售渠道上下文与产品状态

    • 确认目标产品是否已在当前销售渠道中激活,未激活的产品无法通过SalesChannelProductRepository查询到。
    • 检查SalesChannelContext是否包含正确的客户分组、税费设置,确保上下文参数传递无误。
  3. 调试查询结果

    • 在getToolsProductByToolId函数中,先打印$this->productToolRepository->search($criteria, $context)->getElements()的结果,确认是否成功查询到关联的产品数据。
    • 单独调用getSalesChannelProductById,传入已知存在的产品ID和正确的销售渠道上下文,验证该函数本身是否正常工作。
  4. 检查权限与Repository注入

    • 确认salesChannelProductRepository已正确注入到当前类中,避免因依赖注入错误导致Repository实例为Null。
    • 确保当前执行上下文拥有访问销售渠道产品数据的权限。

内容的提问来源于stack exchange,提问作者balrcoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:52:50