Laravel Migrate 中的 Fresh 和 Refresh 命令

任何一位 Laravel 的开发者都肯定对于 migrate:refresh 这个命令很熟悉了,特别是首次发布上线前,随着开发进行,对 migration 文件不断做修改,就会一次又一次地运行这个命令来重建数据库。

而在 Laravel 5.5 版本中,对这个命令又进行了一次增强。或者说增加了一个相似但又有所区别的命令:migrate:fresh.

refreshfresh 命令的区别在于:fresh 命令不按照 migrations 表里的记录逐步回滚,而是通过删除数据库里所有表来跳过还原和回滚的步骤,然后在空数据库上执行每个 migration 文件里的 up 方法。

通过两个命令的输出可以清楚地看到区别:

$ php artisan migrate:refresh
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

上面是 refresh 的输出,可以看到前面先进行了两次 rollback 操作,然后再执行了两次 migrate 操作。

接下来再看看 fresh 命令的输出:

$ php artisan migrate:fresh
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

注意输出的第一行,直接进行了 drop all tables 的操作。

关于这个命令的更多信息,你也可以查看 Taylor 写的这篇文章

本条目发布于。属于PHP分类,被贴了 标签。