laravel迁移表名默认为migrations且不由数据库prefix控制,需通过--table参数临时指定或在config/database.php中为连接配置'migrations'键全局设置,同时必须手动创建结构兼容的自定义表。

在 Laravel 中,迁移表(如 migrations 表)的前缀默认是空的,它**不由数据库连接的 prefix 配置控制**,而是由框架内部硬编码决定的。因此,不能通过修改 config/database.php 中的 'prefix' 来更改迁移表名。要更改迁移表名(比如从 migrations 改为 app_migrations),需通过以下方式实现。
修改 database/migrations 目录下的迁移文件名(不推荐)
迁移表名本身和迁移文件名无关,改文件名只影响执行顺序和描述,不会改变实际记录迁移状态的表名。所以这一步无效,无需操作。
在配置中指定自定义迁移表名(推荐)
Laravel 的 php artisan migrate 命令支持 --table 选项,可临时指定迁移记录表:
-
运行迁移时指定表名:
php artisan migrate --table=app_migrations -
回滚时也需同步指定:
php artisan migrate:rollback --table=app_migrations -
查看状态同样需要:
php artisan migrate:status --table=app_migrations
该方式灵活,适合多应用共用同一数据库但需隔离迁移历史的场景。
全局设置默认迁移表名(Laravel 9+)
从 Laravel 9 开始,可在 config/database.php 的数据库连接配置中添加 'migrations' 键:
'mysql' => [
// ... 其他配置
'migrations' => 'app_migrations',
],
这样所有针对该连接的迁移命令(如 php artisan migrate)将自动使用 app_migrations 表,无需每次加 --table 参数。
手动创建并初始化自定义迁移表(必要步骤)
无论用哪种方式,Laravel 不会自动创建你指定的新迁移表。需手动执行 SQL 创建:
-
MySQL 示例:
CREATE TABLE app_migrations (id INT AUTO_INCREMENT PRIMARY KEY, migration VARCHAR(255) NOT NULL, batch INT NOT NULL); -
PostgreSQL 示例:
CREATE TABLE app_migrations (id SERIAL PRIMARY KEY, migration VARCHAR(255) NOT NULL, batch INTEGER NOT NULL); - 确保字段名、类型与原
migrations表一致(Laravel 源码中只要求migration和batch字段)
注意:首次运行 php artisan migrate 前,该表必须已存在,否则报错。
不复杂但容易忽略的是表的创建和字段兼容性——只要表存在且结构满足基本要求,Laravel 就能正常使用它记录迁移状态。











