laravel 12 中数据库迁移分两步:先用 php artisan make:migration 创建迁移文件,再用 php artisan migrate 执行;需确保 .env 配置正确、数据库服务运行,并注意回滚限制与团队协作顺序。

在 Laravel 12 中创建并执行数据库迁移,主要通过 Artisan 命令完成,整个过程分两步:生成迁移文件、运行迁移。确保数据库连接配置正确(.env 中的 DB_DATABASE、DB_USERNAME 等已设置),且数据库服务正在运行。
创建新的迁移文件
使用 make:migration 命令生成迁移类文件,Laravel 会自动添加时间戳前缀,并存放在 database/migrations/ 目录下:
- 创建空迁移(例如用于新建表):
php artisan make:migration create_posts_table - 创建带字段定义的迁移(快速生成常用字段):
php artisan make:migration create_users_table --create=users - 为已有表添加字段:
php artisan make:migration add_published_at_to_posts_table --table=posts
生成后,打开对应 PHP 文件,在 up() 方法中编写建表或改表逻辑(用 Schema 构建器),在 down() 中写回滚逻辑(如 Schema::dropIfExists('posts'))。
执行迁移(把变更应用到数据库)
运行以下命令将未执行的迁移依次执行:
- 执行所有待处理迁移:
php artisan migrate - 仅执行指定迁移(需配合
--path):php artisan migrate --path=database/migrations/2024_05_01_000000_create_posts_table.php - 回滚上一次迁移(撤销最近一批):
php artisan migrate:rollback - 回滚全部迁移再重跑(慎用,开发环境可用):
php artisan migrate:refresh
执行成功后,Laravel 会在数据库中自动创建 migrations 表,记录已执行的迁移文件名和批次号。
常见注意事项
迁移不是万能的,有些操作不支持自动回滚(比如删除列、修改字段类型),需手动处理 down() 方法;另外,团队协作时务必先 git pull 再 migrate,避免迁移顺序错乱。如果遇到 “Table already exists” 错误,说明表已存在但未被记录,可临时注释掉建表逻辑,先运行 migrate 让记录入库,再恢复代码。
不复杂但容易忽略:每次改完迁移文件,别忘了重新运行 migrate:refresh 或 migrate:rollback && migrate 来验证逻辑是否正确。











