安装Laravel Passport后测试库迁移提示oauth_auth_codes表已存在如何解决
问题原因与解决方法
核心原因
Laravel Passport默认会自动注册自带的迁移逻辑,其内部的表存在性校验默认读取项目default数据库连接配置,不会跟随你命令行临时指定的testing连接切换,所以检测到主库已存在oauth相关表后直接抛出报错,和测试库本身有没有表无关。
修复步骤
- 先在
app/Providers/AppServiceProvider.php的register方法中添加代码,关闭Passport自动迁移:
public function register() { \Laravel\Passport\Passport::ignoreMigrations(); }
- 确认Passport迁移文件已经发布到项目
database/migrations目录,未发布的话执行命令php artisan vendor:publish --tag=passport-migrations,手动发布的迁移文件没有硬编码连接,会自动适配命令行指定的数据库连接。 - 校验
config/database.php中testing连接的配置,确认数据库名、账号等信息完全独立于主库配置,没有误填主库的数据库名称。 - 重新执行测试库迁移:
php artisan migrate --database=testing,如果仍有报错可加--fresh参数强制重置测试库表结构(仅适用于测试环境,禁止在生产环境执行):php artisan migrate:fresh --database=testing
额外排查项
- 检查项目中自定义的迁移脚本是否在类中硬编码了
$connection属性为主库连接名,如有删除该属性即可让迁移跟随命令行指定的连接执行。 - 如果有
.env.testing配置文件,确认其中的数据库配置和主库.env不重复,避免实际连接的还是主库。
内容的提问来源于stack exchange,提问作者Joel Joel Binks
相关产品推荐
相关产品推荐

