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

Shopware 6.4 App Scripting:购物车操作时如何获取分类数据?

在Shopware 6.4 App Scripting购物车钩子中获取分类数据的方法

在购物车相关的App Scripting钩子(如cart.collect)中,确实无法直接通过services.repository调用通用仓储服务,但可以通过以下两种方式获取数据加载能力:

方法1:通过容器获取通用仓储服务

Shopware的App Scripting中,services对象包含container实例,你可以从容器中获取对应实体的仓储服务,再执行搜索逻辑:

// 构建分类查询条件,按需调整筛选规则
const criteria = new Criteria();
criteria.addFilter(new EqualsFilter('id', '目标分类ID'));

// 从容器中获取分类仓储服务
const categoryRepository = services.container.get('category.repository');
const categories = await categoryRepository.search(criteria, context);

方法2:通过商品关联直接获取分类

如果目标是获取购物车内商品关联的分类,更高效的方式是查询商品时直接关联加载分类,避免单独发起分类查询:

// 提取购物车内所有商品的ID
const productIds = cart.lineItems
  .filter(item => item.type === 'product')
  .map(item => item.referencedId);

// 构建商品查询条件,关联加载商品的分类集合
const productCriteria = new Criteria(productIds);
productCriteria.addAssociation('categories');

// 获取商品仓储并执行查询
const productRepository = services.container.get('product.repository');
const products = await productRepository.search(productCriteria, context);

// 遍历商品获取对应的分类信息
products.forEach(product => {
  const productCategories = product.categories;
  // 此处处理分类数据,比如用于折扣计算
});

注意事项

  • 必须在异步上下文使用await执行仓储查询,Shopware 6.4的App Scripting支持异步钩子逻辑
  • 需遵循Shopware的数据权限规则,避免查询超出当前上下文权限的数据
  • 优先通过关联查询减少数据库请求次数,提升钩子执行性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:39:19