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

自定义实体无ReferenceVersionField,能否扩展ProductManufacturer的一对多关联或自定义版本字段名?

问题解答

问题1:能否在版本化实体(如ProductManufacturer)扩展中使用OneToManyAssociationField,关联的自定义实体不包含ReferenceVersionField?

可以实现,但需要显式配置关联字段关闭自动版本关联。

Shopware的版本化实体(比如ProductManufacturer)默认会在关联查询时自动尝试关联对应版本字段,但如果你的自定义实体不需要维护版本关联,可以在定义OneToManyAssociationField时,将referenceVersionField参数设置为null,示例代码如下:

// 在ProductManufacturerDefinition的扩展类中
new OneToManyAssociationField(
    'myCustomEntity',
    MyCustomEntityDefinition::class,
    'product_manufacturer_id', // 自定义实体中关联ProductManufacturer的外键字段
    null // 显式关闭版本字段关联
)

配置后,自定义实体仅需包含product_manufacturer_id字段即可正常关联,DAL生成查询时不会再尝试引用不存在的product_manufacturer_version_id字段。

问题2:若需要保留版本关联,能否自定义引用版本字段的命名(而非默认的product_manufacturer_version_id)?

完全可以。在定义OneToManyAssociationField时,将referenceVersionField参数设置为你自定义的版本字段名称即可,示例代码如下:

// 在ProductManufacturerDefinition的扩展类中
new OneToManyAssociationField(
    'myCustomEntity',
    MyCustomEntityDefinition::class,
    'manufacturer_id', // 自定义的关联外键字段
    'custom_manufacturer_version_id' // 自定义的版本引用字段名
)

此时你的自定义实体需要同时包含manufacturer_id(关联ProductManufacturer的外键)和custom_manufacturer_version_id(自定义版本字段),DAL会使用你指定的字段名生成查询逻辑,替代默认命名。

关于你遇到的SQL错误说明

你触发的Unknown column 'product_manufacturer.myCustomEntity.product_manufacturer_version_id'错误,是因为ProductManufacturer属于Shopware自带的版本化实体,默认情况下DAL会假设关联的自定义实体需要维护版本引用,自动生成对默认版本字段的查询。通过上述两种配置方式,即可解决该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:18:18