第二节 Migrations 数据库迁移文件

最后更新于:2022-04-02 01:42:17

本节涉及以下目录或文件: > * database/migrations [TOC] ## 迁移文件创建 ### 创建迁移文件:Artisan 命令 `make:migration` ~~~shell $ php artisan make:migration create_users_table ~~~ >[info] 所有创建的迁移文件都被统一放在 `database/migrations` 目录中。 > 每个迁移文件的名称都包含了一个 `时间戳`,以便让 Laravel 确认迁移的顺序。 ### 创建选项 #### 指定数据表的名称:`--table` 和 `--create` 选项 ~~~shell $ php artisan make:migration create_users_table --create=users $ php artisan make:migration add_votes_to_users_table --table=users ~~~ #### 指定自定义输出路径: `--path` 选项 >[warning] 提供的路径必须是相对于应用程序的基本路径。 ## 迁移文件结构 打开 `database/migrations` 文件夹可以看到,Laravel 已默认创建好了两个迁移文件: * database/migrations/2014_10_12_000000_create_users_table.php —— 用于构建 `users` 用户表 * database/migrations/2014_10_12_100000_create_password_resets_table.php —— 用于构建密码重置表 > 打开迁移实例 `database/migrations/2014_10_12_000000_create_users_table.php` ~~~php increments('id'); // 由 increments 方法创建了一个 integer 类型的自增长 id。 $table->string('name'); // 由 string 方法创建了一个 name 字段,用于保存用户名称。 $table->string('email')->unique(); // 由 string 方法创建了一个 email 字段,且在最后指定该字段的值为唯一值,用于保存用户邮箱。 $table->string('password', 60); // 由 string 方法创建了一个 password 字段,且在 string 方法中指定保存的值最大长度为 60,用于保存用户密码。 $table->rememberToken(); // 由 rememberToken 方法为用户创建一个 remember_token 字段,用于保存『记住我』的相关信息。 $table->timestamps(); // 由 timestamps 方法创建了一个 created_at 和一个 updated_at 字段,分别用于保存用户的创建时间和更新时间。 }); } /** * Reverse the migrations. * 回滚数据库迁移 * @return void */ public function down() { Schema::dropIfExists('users'); } } ~~~ 可见里面定义了一个 `CreateUsersTable` 类,并继承自 `Migration` 基类。 `CreateUsersTable` 有两个方法: 1. 运行迁移时调用的 `up` 方法:为数据库添加新的数据表、字段或索引。 2. 回滚迁移时调用的`down` 方法: `up` 方法的逆操作。 可以在这两个方法中使用 [结构生成器](database/schema.md) 来创建或修改数据表。 ## 迁移文件运行 ### 运行所有未运行过的迁移:Artisan 命令 `migrate` ~~~shell $ php artisan migrate ~~~ #### 强制运行:`--force` 选项 一些迁移的操作是具有破坏性的,它们可能会导致数据丢失。 为了保护线上环境的数据库,系统会在这些命令被运行之前显示确认提示。 若要忽略此提示并强制运行命令,则可以使用 `--force` 标记: ~~~shell $ php artisan migrate --force ~~~ ## 迁移文件回滚 ### 回滚最后一次迁移:Artisan 命令 `migrate:rollback` ~~~shell $ php artisan migrate:rollback ~~~ >[warning] 此命令是对上一次执行的「批量」迁移回滚,其中可能包括多个迁移文件。 #### 限制步数:`--step` 选项 ~~~shell $ php artisan migrate:rollback --step=5 ~~~ > 此命令将会回滚最后的 5 个迁移。 ### 回滚所有的迁移:Artisan 命令 `migrate:reset` ~~~shell $ php artisan migrate:reset ~~~ ### 回滚后重新运行迁移:Artisan 命令 `migrate:refresh` ~~~shell $ php artisan migrate:refresh // 刷新数据库结构并执行数据填充 $ php artisan migrate:refresh --seed ~~~ >[info] 此命令不仅会回滚数据库的**所有**迁移,还会接着运行 `migrate` 命令,所以可以有效的重新创建整个数据库。 #### 限制步数:`--step` 选项 ~~~shell $ php artisan migrate:refresh --step=5 ~~~ > 回滚并再迁移最后的 5 个迁移。
';