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

Shopware 6中扩展order_delivery运行时字段后无法读取,如何解决?

问题分析与解决方案

你遇到的错误核心原因是错误地给持久化字段添加了Runtime()标记,同时可能存在缓存未清理的问题,具体解决步骤如下:

1. 修正实体扩展代码,移除Runtime()标记

Runtime()标记的作用是标记字段为非持久化运行时字段,这类字段不会映射到数据库列,也不会被实体的属性访问机制识别。你的字段已经存在于order_delivery表中并存储了数据,属于持久化字段,完全不需要这个标记。

修改后的代码:

#[Autoconfigure(tags: ['shopware.entity.extension'])]
class OrderDeliveryReferenceExtension extends EntityExtension
{
    public function extendFields(FieldCollection $collection): void
    {
        $collection->add(
            (new IntField('reference_number', 'referenceNumber'))
                ->addFlags(new ApiAware()),
        );
    }

    public function getDefinitionClass(): string
    {
        return OrderDeliveryDefinition::class;
    }
}

2. 清理Shopware缓存

Shopware会缓存实体定义,修改扩展后必须清理缓存才能让新的字段映射生效,执行以下命令:

bin/console cache:clear
bin/console system:cache:clear

3. 验证扩展激活状态

确保你的自定义扩展已经在Shopware后台启用,或者在config/bundles.php中正确注册了对应的Bundle。

4. 可选:字段类型校验

检查数据库中reference_number列的类型是否与IntField匹配:

  • 如果数据库列是INT类型,当前代码没问题
  • 如果是BIGINT类型,需要将IntField替换为BigIntField

完成以上步骤后,$this->delivery->get('referenceNumber')就能正常读取字段值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:42:26