make:migration报错setSchemaIgnoreClasses方法未定义如何修复
问题原因
这个错误和缓存无关,是Doctrine组件版本不兼容导致的:setSchemaIgnoreClasses是Doctrine\ORM\Configuration类在Doctrine ORM 2.14.0版本才新增的方法,你当前项目内安装的doctrine/orm版本低于2.14,但配套的迁移、DBAL等Doctrine组件版本过高,调用了这个不存在的方法,所以抛出错误。
修复方案
按以下步骤操作即可解决:
- 先确认本地doctrine/orm版本,在项目根目录执行命令:
composer show doctrine/orm
如果输出的版本号小于2.14.0,即可确认是版本错配问题。
2. 按项目场景执行对应composer命令调整依赖版本:
- Laravel项目(使用laravel-doctrine扩展套件):执行命令升级ORM到兼容版本,自动匹配所有关联依赖:
composer require doctrine/orm:^2.14 laravel-doctrine/migrations:^2.3 --with-all-dependencies
- Symfony项目:执行命令升级DoctrineBundle和ORM到匹配版本:
composer require doctrine/orm:^2.14 doctrine/doctrine-bundle:^2.8 --with-all-dependencies
- 如果项目存在其他依赖限制,暂时无法升级doctrine/orm到2.14以上版本,直接降级迁移包到兼容旧版ORM的版本即可:
composer require doctrine/migrations:^3.4 --with-all-dependencies
- 依赖调整完成后,清除项目缓存,重新执行迁移创建命令即可正常运行:
# Laravel环境执行 php artisan cache:clear # Symfony环境执行 php bin/console cache:clear
注意事项
调整Doctrine相关依赖时必须加上--with-all-dependencies参数,Doctrine各子包版本耦合度高,单独升级/降级某一个包很容易触发新的兼容问题,加该参数可以让Composer自动把所有关联依赖调整到互相兼容的版本。
内容的提问来源于stack exchange,提问作者Amrou rabti
相关产品推荐
相关产品推荐

