通过API更新交叉销售并移除旧关联(无需先获取旧ID)
Shopware 6 API 实现交叉销售替换(无需预先获取旧关联ID)
核心思路
由于product_cross_selling_assigned_products中间表不存储原始产品ID,无法直接通过原始产品ID过滤删除旧关联。我们需要通过关联的product_cross_selling实体来处理——该实体包含productId(原始产品UUID),且删除它会自动级联清理对应的中间表关联数据。
方案一:先清理旧关联,再创建新关联
1. 条件删除旧交叉销售组
通过同步API的delete操作,根据原始产品ID(可选加类型过滤)删除对应的product_cross_selling实体,关联的旧交叉销售产品会被自动级联删除:
{ "entity": "product_cross_selling", "action": "delete", "filter": [ { "type": "equals", "field": "productId", "value": "你的目标产品UUID" }, // 可选:仅删除指定类型的交叉销售(如cross_sell/up_sell/accessory) { "type": "equals", "field": "type", "value": "cross_sell" } ] }
2. 创建新的交叉销售关联
清理完成后,通过upsert操作创建新的交叉销售组及关联产品:
{ "entity": "product_cross_selling", "action": "upsert", "payload": [ { "id": "生成一个新的UUID", "productId": "你的目标产品UUID", "type": "cross_sell", "name": "交叉销售组", "assignedProducts": [ { "productId": "关联产品1的UUID", "position": 1 }, { "productId": "关联产品2的UUID", "position": 2 } ] } ] }
方案二:直接更新现有交叉销售组(无需删除)
如果已知目标产品对应交叉销售组的UUID(或可通过一次简单查询获取),可以用upsert操作结合_replace参数直接替换关联产品,省去删除步骤:
{ "entity": "product_cross_selling", "action": "upsert", "payload": [ { "id": "已存在的交叉销售组UUID", "productId": "你的目标产品UUID", "type": "cross_sell", "_replace": ["assignedProducts"], "assignedProducts": [ { "productId": "新关联产品1的UUID", "position": 1 }, { "productId": "新关联产品2的UUID", "position": 2 } ] } ] }
_replace: ["assignedProducts"]会强制替换该组下的所有旧关联产品,直接覆盖为新列表。
注意事项
- 若需保留不同类型的交叉销售组(如同时存在交叉销售和向上销售),务必在过滤条件中添加
type字段,避免误删其他类型的关联数据。 - 所有UUID需符合Shopware 6的UUID格式要求,可通过代码生成或Shopware后台获取。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

