
当 Laravel 项目首次运行 php artisan migrate 报错“Table 'xxx.migrations' doesn't exist”时,说明用于记录迁移状态的系统表尚未初始化;只需执行 php artisan migrate:install 即可自动创建该表。
当 laravel 项目首次运行 `php artisan migrate` 报错“table 'xxx.migrations' doesn't exist”时,说明用于记录迁移状态的系统表尚未初始化;只需执行 `php artisan migrate:install` 即可自动创建该表。
Laravel 使用 migrations 表来追踪已执行的迁移文件及其执行顺序(通过 batch 和 migration 字段)。该表并非随框架自动创建,而需在首次迁移前显式初始化——尤其在克隆已有项目、数据库为空或重置环境时极易遇到此问题。
✅ 正确解决步骤如下:
-
确认数据库连接正常
检查 .env 中配置是否与实际 MySQL 实例匹配(如你已将 XAMPP MySQL 端口改为 3307,则 DB_PORT=3307 必须准确无误):DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3307 DB_DATABASE=job-board DB_USERNAME=root DB_PASSWORD=
✅ 建议执行 php artisan tinker 后运行 DB::connection()->getPdo(); 验证连通性,避免因凭据或端口错误导致静默失败。
-
初始化 migrations 表
运行以下命令一次性创建 migrations 表(仅需执行一次):php artisan migrate:install
该命令会在当前 DB_DATABASE(即 job-board)中创建结构如下的一张表:
CREATE TABLE `migrations` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `migration` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `batch` int NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-
再执行迁移
初始化成功后,即可正常运行:php artisan migrate
Laravel 将从此表读写记录,确保迁移幂等性与回滚可靠性。
⚠️ 注意事项:
- migrate:install 在 Laravel 8+ 中仍有效,但官方文档已将其标记为“legacy”命令(因 migrate 命令内部已自动处理初始化逻辑);不过当数据库完全为空且未执行过任何迁移时,手动调用仍是最稳妥方案。
- 若执行 migrate:install 报错(如权限不足),请确认数据库用户 root 具有对 job-board 库的 CREATE 权限。
- 切勿手动创建 migrations 表——必须由 Artisan 命令生成,以保证字段类型、索引及字符集与 Laravel 版本兼容。
完成以上操作后,你的迁移流程即可恢复正常,后续 php artisan migrate:fresh 或 rollback 等命令也将可靠运行。


















