第二节 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 个迁移。
';