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

如何在Shopware 6中通过Product Repository获取变体产品名称及选项名

Shopware通过产品仓库获取变体名称/选项名称

1. 完善查询条件,加载关联数据

你现有的筛选逻辑已能定位激活且有库存的变体,但必须添加关联加载才能获取选项相关信息,修改代码如下:

$cri2 = new Criteria();
$cri2->addFilter(new EqualsFilter('parentId', $itemProductId));
$cri2->addFilter(new EqualsFilter("active", 1));
$cri2->addFilter(new RangeFilter('stock', [ 'gt' => 0 ]));

// 关联加载变体的选项组与选项值数据
$cri2->addAssociation('options.group');
$cri2->addAssociation('options.option');

2. 执行查询获取变体集合

通过产品仓库执行搜索,拿到目标变体:

/** @var ProductRepositoryInterface $productRepo */
$productRepo = $this->container->get('product.repository');
$variants = $productRepo->search($cri2, Context::createDefaultContext())->getEntities();

3. 获取目标名称的两种方式

方式一:获取完整变体名称(如“T恤 L”)

遍历变体,拼接父产品名称与选项值名称:

foreach ($variants as $variant) {
    $parentName = $variant->getParent()->getName();
    $optionValues = [];
    
    // 收集当前变体的所有选项值
    foreach ($variant->getOptions() as $opt) {
        $optionValues[] = $opt->getOption()->getName();
    }
    
    $fullVariantName = $parentName . ' ' . implode(' ', $optionValues);
    // 输出示例:T恤 L
}

方式二:仅获取选项名称(如“L”)

直接提取选项值,若需要选项组名称(如“尺码”)也可同步获取:

foreach ($variants as $variant) {
    foreach ($variant->getOptions() as $opt) {
        // 选项值名称(对应图中显示的“L”)
        $optionValueName = $opt->getOption()->getName();
        // 选项组名称(对应图中的“尺码”)
        $optionGroupName = $opt->getGroup()->getName();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:20:42