public function up()
{
Schema::create('user', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('user');
}
这两个方法是互逆的操作,比如我们可以再 up 方法中编写我们要创建的 user 表的相关信息,而 down 方法中则是删除 user 表的操作。这样,我们就可以做到回滚操作,当我们创建 user 表之后发现某个字段名写错了,就可以通过 down 来删除 user 表,进而重新建立 user 表。
假设 user 表有 id,username,email 三个字段,那么可以再 up 方法中写
public function up()
{
Schema::create('user', function (Blueprint $table) {
$table->increments('id')->index()->comment('用户id');
$table->string('name')->default('')->comment('用户名');
$table->string('email')->nullable()->comment('用户邮箱');
$table->timestamps();
});
}
一般,我们的逻辑会在闭包函数中写。上面的代码,即时不能完全明白,也可以大概猜出以下几点:
我们操作的表是 user 表。
user 表中定义了 id 字段,因为调用了 increments 方法,所以 id 为 auto_increment,调用了 index 方法说明给 id 添加了索引,最后 comment 等同于注释。
有了 id 的经验,那么 name 字段也很好理解了,string 方法说明 name 是 varchar/char 类型的,default 定义了 name 字段的默认值。
email 字段 调用了 nullable 方法说明运行 email 字段为空。
定义字段结构的时候可以使用链式调用的方式。
Laravel 中的方法是满足你对 sql 语句的所有操作,如果你需要定义一个类型为 text 的字段,那么可以调用 text() 方法,更多的方法说明可以参见文档 Laravel 数据库结构构造器。
我们已经编写好了 user 表的结构,接下来执行 php artisan migrate,Laravel 会根据 create 方法自动为我们创建 user 表。至此,我们已经成功的通过 Larvel 的迁移功能来实现创建表。 Rollback
使用 Laravel 的迁移功能可以有后悔药吃。
执行 php artisan migrate 创建 user 表之后,觉得不行,不要 user 这张表,于是你打算删除这张表。那么这时候我们就要使用刚刚说到的 down 方法了。
public function down()
{
Schema::dropIfExists('user');
}
class UserTableSeeder extends Seeder
{
public function run()
{
factory(App\User::class)->times(10)->make()->each(function($user,$index){
$user->save();
});
}
}
run 函数中这一波行云流水的链式调用在我刚刚开始接触 Laravel 的时候也是一脸黑线,不过习惯之后感觉这代码可读性确实很强