Shopware 6自定义插件创建产品价格:product.price与product_price疑问
关于Shopware产品价格的问题解答
1. product_price实体的用途
product_price表主要用于存储价格历史记录、促销价/阶梯价等价格规则关联数据、多渠道专属价格,属于后台支撑性存储。而product.price是当前商品生效的实时价格快照,以JSON格式存在product表的price字段中,目的是让前端和业务逻辑能快速获取当前有效价格,避免频繁关联查询历史表。
2. 如何创建product.price属性
你的代码思路是对的,不需要操作product_price仓库,直接操作product对象的price属性即可,注意几个细节:
- 先确保
product.price已初始化(新商品可能为空,需先赋值空对象):if (!this.product.price) { this.product.price = {}; } - 修正代码里的语法错误(
currencyId后缺少逗号):setPrice() { if (!this.product.price) { this.product.price = {}; } this.product.price["c" + this.currencyId] = { net: 10.00, // 替换为实际净价 gross: 12.00, // 替换为实际总价 linked: true, listPrice: null, currencyId: this.currencyId, regulationPrice: null }; // 之后提交商品表单或调用API保存即可,系统会自动序列化price字段到product表 } - 保存商品时,系统会自动将
product.price的JSON结构存入product表的price字段,无需手动处理数据库。
3. 是否有关于创建product.price的官方文档
Shopware 6的官方开发文档中,产品实体结构和价格管理相关章节有详细说明,涵盖price字段的结构定义、存储逻辑,以及和product_price表的区别,你可以在官方文档的开发板块找到对应内容。
4. 属性product.purchase_price的配置方式是怎样的?它也是一个简单JSON对象吗?
product.purchase_price同样是JSON格式的对象,结构和product.price类似,键为货币标识(如c1),值包含net、gross、currencyId等字段。配置方式和price一致:
- 前端直接操作对象:
if (!this.product.purchase_price) { this.product.purchase_price = {}; } this.product.purchase_price["c" + this.currencyId] = { net: 8.00, gross: 9.60, currencyId: this.currencyId }; - 它存储在
product表的purchase_price字段中,无需操作额外的数据库表。
内容的提问来源于stack exchange,提问作者rammi22
相关产品推荐
相关产品推荐

