Laravel5.6中Migrations使用

Migrations可理解为数据库的版本控制,中文被翻译为迁移

生成迁移

php artisan make:migration create_users_table;//生成指定名称的migration文件,位于database/migrations目录下
//迁移文件名的时间戳用于Laravel判断其顺序
php artisan make:migration create_users_table --create=users;//生成创建并指定表名为users的迁移文件
php artisan make:migration add_votes_to_users_table --table=users;//生成指定表名为users的迁移文件

示例:

<?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('flights', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

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

执行迁移

php artisan migrate;
php artisan migrate --force;//强制执行

回滚迁移

php artisan migrate:rollback;
php artisan migrate:rollback --step=5;//回滚指定条数的迁移(一个迁移文件为一条)
php artisan migrate:reset;//回滚所有迁移
php artisan migrate:refresh;//回滚所有迁移后重新执行迁移
php artisan migrate:refresh --seed;//回滚所有迁移后重新执行迁移并填充数据
php artisan migrate:refresh --step=5;//回滚指定条数迁移后重新执行迁移
php artisan migrate:fresh;//从数据库中删除所有表然后执行迁移
php artisan migrate:fresh --seed;//从数据库中删除所有表然后执行迁移并填充数据

创建表

Schema::create('users', function ($table) {
    $table->increments('id');
});
if (Schema::hasTable('users')) {
    //
}//检查表是否存在
if (Schema::hasColumn('users', 'email')) {
    //
}//检查列是否存在
Schema::connection('foo')->create('users', function (Blueprint $table) {
    $table->increments('id');
});//指定要使用数据库名

重命名/删除表

Schema::rename($from, $to);
Schema::drop('users');
Schema::dropIfExists('users');

数据列

Schema::table('users', function (Blueprint $table) {
    $table->string('email');
});

常见数据列类型:

$table->increments('id');//自增主键类型
$table->string('name', 100);//VARCHAR类型带可选长度参数
$table->enum('level', ['easy', 'hard']);//枚举类型
$table->float('amount', 8, 2);//FLOAT类型带精度和总位数
$table->text('description');//TEXT类型
$table->timestamps();//添加允许为空的created_at和updated_at
$table->decimal('amount', 5, 2);//DECIMAL类型带精度和范围
$table->double('column', 15, 8);//DOUBLE类型列带精度总共15位数字小数点后8位

其他常见选项:

Schema::table('users', function (Blueprint $table) {
    $table->string('email')->nullable();
});//允许为NULL
->after('column');//指定为一个列之后
->autoIncrement();//指定为自增主键
->comment('my comment');//指定注释信息
->default($value);//指定列的默认值
->unsigned();//设置INTEGER列为UNSIGNED

修改数据列

前置条件:composer require doctrine/dbal

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change();
});//将name列的尺寸从25增加到50
Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change();
});//修改该列允许NULL值

重命名列

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

删除数据列

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('votes');
});//删除单个列
Schema::table('users', function (Blueprint $table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});//删除多个列

创建索引

$table->string('email')->unique();//创建时指定列值为唯一索引
$table->unique('email');//创建后指定列值为唯一索引
$table->index(['account_id', 'created_at']);//创建组合索引
$table->index('email', 'unique_email');//指定字段的索引名称
$table->primary('id');//添加主键索引
$table->primary(['id', 'parent_id']);//添加组合索引
$table->unique('email');//添加唯一索引
$table->index('state');//添加普通索引
$table->spatialIndex('location');//添加空间索引

删除索引

$table->dropPrimary('users_id_primary');//删除主键索引
$table->dropUnique('users_email_unique');//删除唯一索引
$table->dropIndex('geo_state_index');//删除普通索引
$table->dropSpatialIndex('geo_location_spatialindex');//删除空间索引

外键约束

Schema::table('posts', function (Blueprint $table) {
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users');
});//关联外键
$table->dropForeign('posts_user_id_foreign');//删除外键
Schema::enableForeignKeyConstraints();//启用外键约束
Schema::enableForeignKeyConstraints();//关闭外键约束

标签: 无

发表评论: