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

Shopware DAL版本创建与合并:关联包含及订单编辑实体配置问题

问题解答

核心问题答案

是的,必须把这个关联实体设置为版本感知,否则订单克隆流程不会自动复制该实体,后续版本合并时就会因为找不到对应版本的关联实体而触发外键(FK)错误。你的实体目前只是通过ReferenceVersionField关联了订单的版本,但自身没有开启版本感知,所以不在Shopware订单版本克隆的范围内。

支持订单编辑(版本创建与合并)的实体定义关键检查点

  • 开启实体版本感知:实体类必须实现VersionableInterface,同时在实体定义中添加VersionField,这是让实体被纳入版本克隆流程的核心标记。
  • 配置正确的版本关联字段:保留ReferenceVersionField(对应你的order_version_id),确保关联的是订单的具体版本记录,而非主订单ID,这是版本感知关联的基础。
  • 关联关系适配版本机制:ManyToOneAssociationField要与版本字段匹配,且关联的目标实体(如这里的OrderDefinition)本身已开启版本感知(订单默认是版本感知的,这部分你已经做对了)。
  • 字段标记完整性:确保主键、外键、版本字段都添加了必要的Flag(比如Required、ApiAware),避免克隆时遗漏关键字段导致数据不完整。
  • 合并逻辑兼容性:如果实体有自定义业务逻辑,需确认VersionMerger能正确处理该实体的合并逻辑,基础场景下开启版本感知后默认逻辑即可正常工作。

针对你提供的实体定义的修改建议

在你的实体定义中,需要添加版本字段,并确保实体类实现版本接口:

// 实体类实现VersionableInterface
class YourEntityDefinition extends EntityDefinition implements VersionableInterface {
    // ... 其他代码

    public function defineFields(): FieldCollection
    {
        return new FieldCollection([
            (new IdField('id', 'id'))->addFlags(new ApiAware(), new PrimaryKey(), new Required()),
            // 添加版本字段
            (new VersionField())->addFlags(new ApiAware(), new Required()),
            
            (new FkField('order_id', 'orderId', OrderDefinition::class))->addFlags(new ApiAware(), new Required()),
            (new ReferenceVersionField(OrderDefinition::class, 'order_version_id'))->addFlags(new ApiAware(), new Required()),

            // ... entity content
            (new CustomFields())->addFlags(new ApiAware()),

            (new ManyToOneAssociationField('order', 'order_id', OrderDefinition::class, 'id', false))->addFlags(new ApiAware()),
        ]);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:45:34