Laravel 5 基础(六)- 数据库迁移(Migrations)

database migrations 是laravel最强大的功能之一。数据库迁移能够理解为数据库的版本控制器。php

database/migrations 目录中包含两个迁移文件,一个创建用户表,一个用于用户密码重置。mysql

在迁移文件中,up 方法用于建立数据表,down方法用于回滚,也就是删除数据表。laravel

  • 执行数据库迁移
php artisan migrate
#输出
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table

查看mysql数据库,能够看到产生了三张表。 migratoins 表是迁移记录表,userspasword_resetssql

  • 若是设计有问题,执行数据库回滚
php artisan migrate:rollback
#输出
Rolled back: 2014_10_12_100000_create_password_resets_table
Rolled back: 2014_10_12_000000_create_users_table

再次查看mysql数据库,就剩下 migrations 表了, users password_resets 被删除了。数据库

修改迁移文件,再次执行迁移。bash

  • 新建迁移
php artisan make:migration create_article_table --create='articles'
#输出
Created Migration: 2015_03_28_050138_create_article_table

database/migrations 下生成了新的文件。设计

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticleTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function(Blueprint $table)
        {
            $table->increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('articles');
    }

}

自动添加了 id列,自动增加,timestamps() 会自动产生 created_atupdated_at 两个时间列。咱们添加一些字段:版本控制

public function up()
    {
        Schema::create('articles', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('title');
            $table->text('body');
            $table->timestamp('published_at');
            $table->timestamps();
        });
    }

执行迁移:code

php artisan migrate

如今有了新的数据表了。rem

假设咱们须要添加一个新的字段,你能够回滚,而后修改迁移文件,再次执行迁移,或者能够直接新建一个迁移文件

php artisan make:migration add_excerpt_to_articels_table

查看新产生的迁移文件

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddExcerptToArticelsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }

}

只有空的 up 和 down 方法。咱们能够手工添加代码,或者咱们让laravel为咱们生成基础代码。删除这个文件,从新生成迁移文件,注意添加参数:

php artisan make:migration add_excerpt_to_articels_table --table='articles'

如今,up 方法里面有了初始代码。

public function up()
    {
        Schema::table('articles', function(Blueprint $table)
        {
            //
        });
    }

添加实际的数据修改代码:

public function up()
    {
        Schema::table('articles', function(Blueprint $table)
        {
            $table->text('excerpt')->nullable();
        });
    }
    
    public function down()
    {
        Schema::table('articles', function(Blueprint $table)
        {
            $table->dropColumn('excerpt');
        });
    }

nullable() 表示字段也能够为空。

再次执行迁移并检查数据库。

若是咱们为了好玩,执行回滚

php artisan migrate:rollback

excerpt 列没有了。

相关文章
相关标签/搜索