欢迎光临南昌笑劳网络科技有限公司,我们是一家专注中小型企业营销推广服务的公司!

咨询热线:400 76543 55
南昌笑劳网络科技有限公司
最新资讯News
南昌笑劳网络科技有限公司

Laravel如何执行数据库迁移Migration_Laravel数据表创建与字段修改命令【说明】

作者:冰火之心 | 点击: | 来源:冰火之心
0701
2026
Laravel迁移必须通过phpartisanmake:migration生成文件并执行phpartisanmigrate,禁止跳过校验或手动操作数据库,否则破坏migrations表一致性,导致回滚失败与协作事故。...
Laravel迁移必须通过php artisan make:migration生成文件并执行php artisan migrate,禁止跳过校验或手动操作数据库,否则破坏migrations表一致性,导致回滚失败与协作事故。

直接执行迁移命令就能创建表或修改结构,但必须先写好迁移文件,且不能跳过 php artisan migrate 的校验逻辑。

如何生成并运行新建数据表的迁移文件

新建表必须通过 php artisan make:migration 生成文件,再在 up() 方法里用 Schema::create() 定义字段。Laravel 不允许直接执行 SQL 创建表——它依赖迁移文件记录版本和回滚能力。

  • 运行 php artisan make:migration create_users_table 生成空迁移文件
  • 编辑该文件,在 up() 中调用 Schema::create('users', function (Blueprint $table) { ... })
  • 字段定义用 $table->id()$table->string('name') 等方法,不是原生 SQL
  • 确认无误后执行 php artisan migrate,Laravel 自动记录到 migrations

如何安全地修改已有数据表字段(比如加字段、改类型)

不能直接用 ALTER TABLE 手动操作,否则 migrations 表会丢失记录,后续部署或回滚会出错。所有变更都得走新迁移文件 + Schema::table()

  • 运行 php artisan make:migration add_email_to_users_table(命名需体现意图)
  • up() 中写 Schema::table('users', function (Blueprint $table) { $table->string('email')->after('name'); });
  • 如果要改字段类型(如 stringtext),需确保数据库驱动支持 change(),MySQL 需装 doctrine/dbal 扩展
  • 执行 php artisan migrate,Laravel 检查 migrations 表后只运行未记录的迁移

常见报错:‘SQLSTATE[HY000]: General error: 1824 Failed to open the referenced table’

这通常发生在迁移中定义了外键,但被引用的表还没创建,或迁移执行顺序错乱。Laravel 按文件名前缀(时间戳)排序执行,不是按文件创建顺序。

  • 检查迁移文件名是否为标准格式:2025_05_12_100000_create_posts_table.php
  • 外键关联的表迁移必须在当前迁移之前执行,比如 posts 表引用 users,则 create_users_table 的时间戳必须更早
  • 不要手动修改迁移文件名中的时间戳来“抢序”,会导致本地与生产环境不一致
  • 若已出错,先用 php artisan migrate:rollback --step=1 回退一步,再修复依赖关系重新迁移

为什么不能跳过迁移直接操作数据库?

因为 migrations 表是 Laravel 迁移系统唯一的状态源。删掉某条记录、手动建表、或用其他工具改结构,都会让 php artisan migrate:status 显示异常,rollback 失效,团队协作时极易引发线上事故。

  • php artisan migrate:status 查看哪些迁移已执行、哪些待运行
  • php artisan migrate:fresh 仅用于本地开发重置,它会 DROP 所有表,线上绝对禁用
  • 生产环境修改字段,必须走新增迁移文件,哪怕只是加个 nullable()
php artisan make:migration add_status_to_posts_table
// 编辑该文件:
public function up(MigrationBuilder $migration)
{
    Schema::table('posts', function (Blueprint $table) {
        $table->string('status')->default('draft')->after('title');
    });
}
// 再运行:
php artisan migrate

真正麻烦的从来不是命令怎么敲,而是迁移文件写完之后,有没有人记得把它提交进 Git、有没有人在上线前漏跑那一条 migrate、以及——有没有人偷偷绕过它直接连上数据库改了字段。


# mysql  # 数据库  # 有没有人  # 跳过  # 线上  # 该文件  # 还没  # 就能  # 已有  # 把它  # 会让  # table  # function  # php  # laravel  # git  # 工具  # ai  # 为什么  # sql  # String  # Error  # Nullable  # 报错 

我要咨询做网站
成功案例
建站流程
  • 网站需
    求分析
  • 网站策
    划方案
  • 页面风
    格设计
  • 程序设
    计研发
  • 资料录
    入优化
  • 确认交
    付使用
  • 后续跟
    踪服务
  • 400 76543 55
    sale#ncxiaolao.cn
Hi,Are you ready?
准备好开始了吗?
那就与我们取得联系吧

咨询送礼现在提交,将获得笑劳科技策划专家免费为您制作
价值5880元《全网营销方案+优化视频教程》一份!
下单送礼感恩七周年,新老用户下单即送创业型空间+域名等大礼
24小时免费咨询热线400 76543 55
合作意向表
您需要的服务
您最关注的地方
预算

直接咨询