生成迁移
如果生成迁移命令不指定生成名,那么就默认以users为表名
php artisan make:migration create_users_table
迁移的操作方法
面对的迁移的操作有两个方法: up 和 down。
方法up 的作用是向数据库中添加新的表或列或索引,
而 down的方法,就是up 方法的反向操作
就是说,up方法中就是添加操作,down方法中就是删除操作
up方法
public function up()
{
Schema::create('photos', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
down方法
public function down()
{
Schema::dropIfExists('photos');
}
执行迁移
执行以下 migrate Artisan 命令,来执行未执行过的迁移
php artisan migrate
这个命令只会执行还没有迁移或修改过的文件,已执行完成 的不会再进行迁移
执行完成后会生成新的数据表,并且所有的迁移记录都记录在数据库中的
migrations数据表中
migration是记录迁移的文件,batch是记录迁移的次数,是第几次迁移
就是说,不是说执行了某个文件几次,而是第几次去执行它的,比如,上面图片中id为1,23,45的迁移是第一次执行迁移文件而生产的,id为6的是第二次执行迁移文件而生成的
回滚迁移
要回滚到最后一次操作,可以使用 rollback 命令。此命令会回滚到最后 「一批」 的迁移,这可能会包含多个迁移文件
执行回滚命令
php artisan migrate:rollback
这条命令是回滚到最近的一次迁移,它会删除迁移记录和迁移的表
比如,我数据库中有这个迁移记录
执行回滚命令
php artisan migrate:rollback
执行成功后,迁移记录和表就会被删除了
通过向 rollback 命令加上 step 参数,可以回滚指定数量的迁移。例如,以下命令将回滚最后五个迁移
php artisan migrate:rollback --step=5
如果在迁移后觉得有误,可以使用重置命令 migrate:reset ,回滚刚才进行的所有迁移操作,以恢复到上一次迁移状态
php artisan migrate:reset
在生产环境中强制执行迁移
区分生产环境和开发环境,其实是在.env文件中,
里面的APP_ENV=local是开发环境
如果改成APP_ENV=production是生产环境
在生成环境中执行迁移命令是需要二次确认的,如果不需要二次确实 可以执行这个命令
php artisan migrate --force
使用一个命令同时进行回滚和迁移操作
使用 migrate:refresh命令将会回滚所有迁移操作,然后Laravel将自己继续执行 migrate 命令进行重新迁移。
就是说,先回滚,在迁移
php artisan migrate:refresh
在migrate:refresh中,还可以使用 step 参数来一次性选择回滚的次数。例如,以下命令将回滚并重新迁移最后五次迁移
php artisan migrate:refresh --step=5
使用一个命令同时进行删除和迁移操作
使用migrate:fresh 命令将会删除您已迁移的数据表,然后Laravel将自己继续执行 migrate 命令
php artisan migrate:fresh
这个命令和refresh 命令的区别就是执行过程不同,但是结果是相同的
refresh命令是先回滚操作,在进行迁移
fresh命令是同时进行删除和迁移操作
还可以指定步数
php artisan migrate:fresh --seed
数据表
创建数据表
create 方法中可以接受两个参数,一个是表格的名称,第二个是 Closure ,作用是可以在定义一个新数据表的时候接受
Blueprint 对象
Schema::create('photos', function (Blueprint $table) {
$table->id();
$table->timestamps();
//使用$table对象可以生成字段
});
检查表/列是否存在
可以使用 hasTable 和 hasColumn 方法来检测表/列是否存在
if (Schema::hasTable('users')) {
#如果不存在'users'表则执行
//
}
if (Schema::hasColumn('users', 'email')) {
#如果不存在'users','email'列则执行
//
}
更新字段属性
change 方法可以将现有的字段类型修改为新的类型或修改属性。
比如,你可能想增加。字符串字段的长度,可以使用 change 方法把 name 字段的长度从 25 增加到 50
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->change();
});
我们同样可以使用 nullable 将字段修改为允许为空:
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->nullable()->change();
});
重命名字段
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
注意:当前不支持 enum 类型的字段重命名
删除字段
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
});
可以传递一个字段数组给 dropColumn 方法来删除多个字段:
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['votes', 'avatar', 'location']);
});
创建索引
$table->string('email')->index();//创建主键索引