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

Symfony4中使用Gedmo/Loggable时ext_log_entries表缺失,求迁移方案

解决Symfony 4中Gedmo/Loggable的ext_log_entries表缺失问题

遇到这个问题很常见,通常是因为Doctrine还没识别到Gedmo的LogEntry实体,或者还没生成对应的数据库迁移文件。下面给你几个可行的解决方案:

方法一:用Doctrine Migrations自动生成迁移文件

这是最推荐的方式,尤其是在开发和生产环境都适用:

  1. 先确认你的Gedmo配置没问题:
    • 如果你用的是StofDoctrineExtensionsBundle(大部分Symfony项目都会用这个来集成Gedmo扩展),确保bundle已经在config/bundles.php里注册,并且在config/packages/stof_doctrine_extensions.yaml中开启了loggable功能:
      stof_doctrine_extensions:
          default_locale: en_US
          orm:
              default:
                  loggable: true
      
    • 如果是手动集成Gedmo,需要在config/packages/doctrine.yaml的ORM映射里添加Gedmo Loggable实体的路径:
      doctrine:
          orm:
              mappings:
                  GedmoLoggable:
                      type: annotation
                      prefix: Gedmo\Loggable\Entity
                      dir: "%kernel.project_dir%/vendor/gedmo/doctrine-extensions/src/Loggable/Entity"
                      alias: GedmoLoggable
                      is_bundle: false
      
  2. 生成迁移文件:
    在项目根目录运行命令:
    php bin/console make:migration
    
    Doctrine会自动检测到LogEntry实体(对应ext_log_entries表)与当前数据库的差异,生成包含建表语句的迁移文件。
  3. 执行迁移:
    运行命令将表创建到数据库中:
    php bin/console doctrine:migrations:migrate
    

方法二:手动创建迁移文件

这是不推荐,但应急可用的方式:

  1. 运行命令创建空白迁移:
    php bin/console make:migration --empty
    
  2. 在生成的迁移文件的up方法中添加建表语句(适配你的数据库类型,这里以MySQL为例):
    public function up(Schema $schema) : void
    {
        $this->addSql('CREATE TABLE ext_log_entries (
            id INT AUTO_INCREMENT NOT NULL,
            action VARCHAR(8) NOT NULL,
            logged_at DATETIME NOT NULL,
            object_id VARCHAR(64) DEFAULT NULL,
            object_class VARCHAR(255) NOT NULL,
            version INT NOT NULL,
            username VARCHAR(255) DEFAULT NULL,
            data LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:array)\',
            PRIMARY KEY(id)
        ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB');
        $this->addSql('CREATE INDEX log_class_lookup_idx ON ext_log_entries (object_class)');
        $this->addSql('CREATE INDEX log_date_lookup_idx ON ext_log_entries (logged_at)');
        $this->addSql('CREATE INDEX log_user_lookup_idx ON ext_log_entries (username)');
        $this->addSql('CREATE INDEX log_version_lookup_idx ON ext_log_entries (object_id, object_class, version)');
    }
    
  3. 执行迁移命令完成建表。

注意事项

  • 执行迁移前,请确保你的数据库连接配置正确,并且有足够的权限创建表。
  • 如果之前尝试过错误的迁移,可以用php bin/console doctrine:migrations:rollback回滚后再重新操作。
  • 生产环境下,尽量不要用php bin/console doctrine:schema:update --force直接更新表结构,迁移文件的方式更可控且便于追踪变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:40:09