生成迁移
使用 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 构建器来创建和修改表,要了解更多 Schema 构建器提供的方法,查看其文档。下面让我们先看看创建 flights
表的简单示例:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFlightsTable extends Migration
{
/**
* Run the migrations .
*
* @return void
*/
public function up()
{
Schema::create('flight' , function (Blueprint $table) {
$table->increment('id');
$table->string('name');
$table->string('airline');
$table->timestamps();
});
}
/**
* Reverse the migrations.
* @return void
*/
public function down()
{
Schema:drop('flights');
}
}
运行迁移
要运行应用中所有未执行的迁移,可以使用 Artisan 命令提供的 migrate
方法:
php artisan migrate
注:如果你正在使用 Homestead 虚拟机,需要在虚拟机中运行上面这条命令。
回滚迁移
想要回滚最新的一次迁移”操作“,可以使用 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
方法接收两个参数,第一个是表名,第二个是获取用于定义新表的 Blueprint
对象的闭包:
Schema:create('users' , function ($table) {
$table->increment('id');
});
当然,创建新表的时候,可以使用 Schema 构建器中的任意列方法来定义数据表的列。
检查表/列是否存在
你可以轻松地使用 hasTable
和 hasColumn
方法检查表或列是否存在:
if (Schema::hasTable('users')) {
//
}
if (Schema::hasColumn('users' , 'email')) {
//
}
数据库连接&表选项
如果你想要在一个数据库连接上执行表结构操作,而该数据库连接并不是默认数据库连接,可以使用 connection
方法:
Schema::connection('foo')->create('users' , function (Blueprint $table) {
$table->increments('id');
});
要设置表的存储引擎、字符编码等选项,可以在 Schema 构建器上使用如下命令:
$table->engine = 'InnoDB'; 指定存储表的存储引擎(MySQL)
$table->charset = 'utf8'; 指定数据表的默认字符集
$table->collation='utf8_unicode_ci' 指定数据表的字符序
$table->temporary(); 创建临时表