如何在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
相关产品推荐
相关产品推荐

