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

如何为指定类目构建带选项的属性组查询条件?

问题分析与解决方案

你当前的查询失败核心原因是关联路径错误,Shopware 6中属性组(PropertyGroup)与类目(Category)为直接多对多关联,无需通过选项(PropertyGroupOption)的productProperties层级去过滤。以下是修正后的实现方案:

修正后的查询代码

$config = $slot->getFieldConfig();

if (! $selectedProperties = $config->get('selectedProperties')) {
    return null;
}

$selectedPropertyIds = $selectedProperties->getValue();
$targetCategoryId = '16561f02419949feb5ac61a4ee6c6211';

// 初始化查询条件:优先使用选中的属性组ID,否则查询所有
$criteria = $selectedPropertyIds ? new Criteria($selectedPropertyIds) : new Criteria();

// 关联属性组选项,并按选项名称升序排序
$criteria->addAssociation('options');
$criteria->getAssociation('options')->addSorting(new FieldSorting('name', FieldSorting::ASCENDING));

// 过滤指定类目下的属性组
$criteria->addFilter(new EqualsFilter('categories.id', $targetCategoryId));

// 过滤掉无选项的属性组(可选,按需开启)
$criteria->addFilter(new NotNullFilter('options.id'));

// 执行查询(需注入PropertyGroupRepository)
$propertyGroups = $this->propertyGroupRepository->search($criteria, $context)->getElements();

关键修正点

  1. 关联路径修正:直接通过categories.id过滤属性组所属类目,无需绕到选项的关联层级
  2. 空选项过滤:通过NotNullFilter确保返回的属性组都有可用选项,避免渲染空内容
  3. 逻辑一致性:保留原有的选中属性组ID过滤逻辑,同时叠加类目过滤,确保只返回符合双重条件的属性组

前端hover菜单实现思路

拿到查询后的$propertyGroups数据后,可渲染成如下结构(示例):

<div class="menu-item">
    <a href="#">Wine</a>
    <div class="submenu">
        <?php foreach ($propertyGroups as $group): ?>
            <div class="property-group">
                <h4><?= $group->getName() ?></h4>
                <ul>
                    <?php foreach ($group->getOptions() as $option): ?>
                        <li><a href="#"><?= $option->getName() ?></a></li>
                    <?php endforeach; ?>
                </ul>
            </div>
        <?php endforeach; ?>
    </div>
</div>

再通过CSS实现hover显示子菜单:

.submenu {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    gap: 2rem;
    padding: 1rem;
    background: #fff;
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.menu-item {
    position: relative;
}
.menu-item:hover .submenu {
    display: flex;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:52:44