跳至正文

Laravel 迁移文件 简单总结

参考

简介

数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构。迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构。如果你曾经试过让同事手动在数据库结构中添加字段,那么数据库迁移可以让你不再需要做这样的事情。

执行 php artisan migtate 后 数据库中会生成一个迁移文件表 migrations ,每一条记录对应一个执行过的迁移文件,怎么看每次迁移了哪些文件?在 migrations 表中有一个 batch 字段,字段值相同的为同一次迁移

创建 created方法

Schema::create('users', function (Blueprint $table) {
    //...		
});

修改 table方法

数据库因为业务需要变更时,每个表的变更创建一个单独的迁移文件方便生产执行.

需要引入composer require doctrine/dbal 扩展包

Schema::table('migration_demo', function (Blueprint $table) {

});

1 对一个字段做多种修改 例如 重命名和修改类型同时进行.原字段为type 类型int

//无效方式1
Schema::table('migration_demo', function (Blueprint $table) {
    $table->bigInteger('type')->default('0')->change();
    $table->renameColumn('type', 'demo_type');
    //经测试这两号代码颠倒顺序最后生成的语句是一样的
});

执行语句, 字段重命名时又改回了默认的int类型

ALTER TABLE migration_demo CHANGE type demo_type INT DEFAULT 0 NOT NULL
ALTER TABLE migration_demo CHANGE type type BIGINT DEFAULT 0 NOT NULL
//无效方式2
Schema::table('migration_demo', function (Blueprint $table) {
    $table->bigInteger('type')->default('0')->change()->renameColumn('type', 'demo_type');
});

执行语句 ,rename并没有生效

ALTER TABLE migration_demo CHANGE type type BIGINT DEFAULT 0 NOT NULL

同一字段执行多种变更,正确的方式

Schema::table('demo', function (Blueprint $table) {
   $table->renameColumn('name', 'demo_name');
});
Schema::table('demo', function (Blueprint $table) {
   $table->string('demo_name', 255)->default('')->change();
});

执行语句结果

ALTER TABLE demo CHANGE demo_name demo_name VARCHAR(255) DEFAULT '' NOT NULL COLLATE utf8mb4_unicode_ci	
ALTER TABLE demo CHANGE name demo_name VARCHAR(20) DEFAULT '' NOT NULL

迁移文件的另一种简介执行方式,使用DB statement 执行原生DDL语句

DB::statement("ALTER TABLE `lara`.`users` CHANGE COLUMN `remember_token` `remember_tokens` VARCHAR(255) COLLATE 'utf8mb4_unicode_ci' NULL DEFAULT NULL");

总结

个人感觉这种方式适合中小型项目和公司,在有DBA的公司应该使用专业的数据库迁移工具