简介
所谓迁移就像是数据库表结构的版本控制,这种机制允许团队轻松的编辑并共享数据库的表结构。
迁移通常和 Laravel 的 schema 构建器结合,从而可以很容易地构建应用的数据库表结构。
如果你曾经频繁告知团队成员需要手动添加字段到本地数据库的表结构以维护本地开发环境,那么这正是数据库迁移所致力于解决的问题。
Laravel 的 Schema 门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的、优雅的、流式的 API。
生成迁移
使用 Artisan 命令 make:migration 就可以创建一个新的迁移。
php artisan make:migration create_users_table
新的迁移位于 database/migrations 目录下,每个迁移文件名都包含时间戳,从而允许 Laravel 判断其顺序。
--table 和 --create 选项可以用于指定表名以及该迁移是否要创建一个新的数据表。这些选项只需要简单放在上述迁移命令后面并指定表名:
php artisan make:migration create_users_table --create=users
php artisan make:migration add_votes_to_users_table --table=users
如果你想要指定生成迁移的自定义输出路径,在执行 make:migration 命令时可以使用 --path 选项,提供的路径应该是相对于应用根目录的。
迁移的结构
迁移类(迁移文件)包含了两个方法:up 和 down。
up 方法用于新增表、字段或者索引到数据库。
而 down 方法就是 up 方法的逆操作,和 up 里的操作相反。
在这两个方法中,都会用到 Laravel 的 Schema 构建器。
下面是一个迁移类的示例:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
运行迁移
要运行应用中所有未执行的迁移,可以使用 Artisan 命令提供的 migrate 方法:
php artisan migrate
注:如果你正在使用 Homestead 虚拟机,需要在虚拟机中运行上面这条命令。
在生产环境中强制运行迁移
有些迁移操作是毁灭性的,这意味着它们可能造成数据的丢失,为了避免在生产环境数据库中运行这些命令,你将会在运行这些命令之前被提示并确认。想要强制运行这些命令而不被提示,可以使用 --force 标记:
php artisan migrate --force
回滚迁移
想要回滚最新的一次迁移”操作“,可以使用 rollback 命令,注意这将会回滚最后一批运行的迁移,可能包含多个迁移文件。
php artisan migrate:rollback
也可以通过 rollback 命令上提供的 step 选项来回滚指定数目的迁移。
例如,下面的命令将会回滚最后五条迁移:
php artisan migrate:rollback --step=5
migrate:reset 命令将会回滚所有的迁移。
php artisan migrate:reset
在单条命令中回滚 & 迁移
migrate:refresh 命令将会先回滚所有数据库迁移,然后运行 migrate 命令。它可以有效的重建整个数据库。
php artisan migrate:refresh
// 重建数据库并填充数据...
php artisan migrate:refresh --seed
当然,你也可以回滚或重建指定数量的迁移 —— 通过 refresh 命令提供的 step 选项,例如,下面的命令将会回滚或重建最后五条迁移:
php artisan migrate:refresh --step=5
删除所有表 & 迁移
migrate:fresh 命令会先从数据库中删除所有表然后执行 migrate 命令:
php artisan migrate:fresh
php artisan migrate:fresh --seed
数据表
创建表
使用 Schema 门面上的 create 方法来创建新的数据表。
create 方法接收两个参数,第一个是表名ÿ