
Laravel 迁移命令(如 php artisan migrate:fresh)未按 .env 中配置的 DB_DATABASE=unwa 执行,反而写入了其他数据库(如 auction),通常是由于配置缓存未更新导致的。清除配置缓存即可强制 Laravel 重新读取 .env 文件。
laravel 迁移命令(如 `php artisan migrate:fresh`)未按 `.env` 中配置的 `db_database=unwa` 执行,反而写入了其他数据库(如 `auction`),通常是由于配置缓存未更新导致的。清除配置缓存即可强制 laravel 重新读取 `.env` 文件。
在 Laravel 中,运行 php artisan migrate:fresh 时若发现迁移操作实际发生在非预期数据库(例如 auction 而非 .env 中指定的 unwa),根本原因几乎总是配置缓存未同步。Laravel 在生产环境或执行过 php artisan config:cache 后,会将 config/database.php 及其依赖的环境变量(包括 .env 中的 DB_DATABASE)固化为缓存文件 bootstrap/cache/config.php。此后,即使修改了 .env,Laravel 仍会从缓存中读取旧的数据库名——这正是你看到迁移“悄悄”进入 auction(可能为缓存中残留的旧值或系统默认值)的原因。
✅ 正确解决步骤如下:
-
清除全部配置与优化缓存(推荐一次性执行):
php artisan optimize:clear
该命令等价于依次运行:
php artisan config:clear php artisan cache:clear php artisan view:clear php artisan route:clear
-
验证环境变量是否生效(可选但强烈建议):
php artisan tinker >>> config('database.connections.mysql.database') // 应输出 "unwa" >>> $_ENV['DB_DATABASE'] // 应输出 "NotForEverybody" → 实际应为 "unwa",确认 .env 已被加载 -
重新运行迁移:
php artisan migrate:fresh
⚠️ 注意事项:
- 切勿在
.env修改后直接运行迁移而不清缓存——尤其在本地开发中多次切换数据库时; -
php artisan config:cache仅应在生产部署时使用,且每次修改.env后必须重新执行config:clear+config:cache; - 确保
.env文件权限正确(不被 Web 服务器意外覆盖),且无 BOM 或多余空格(可用cat -A .env检查); - 若问题仍存在,检查
config/database.php中mysql连接配置是否硬编码了'database' => env('DB_DATABASE', 'forge')——确保未被意外改为固定值(如'database' => 'auction')。
总结:Laravel 的“缓存优先”机制保障了生产性能,但也要求开发者对配置生命周期保持敏感。optimize:clear 是解决此类“配置失联”问题最直接、最安全的首选方案。











