Laravel 数据库迁移

[toc]

生成数据库迁移文件

php artisan make:migration create_test_table

生成的数据库迁移文件位于 database/migrations 下
2019_08_01_153300_create_test_table.php
每个迁移文件名都包含时间戳,以便让 Laravel 确认迁移的顺序。

php artisan make:migration create_test_table --create=tests
php artisan make:migration add_text_to_test_table --table=tests

指定表名称为tests

如果你想要指定生成迁移指定一个自定义输出路径,则可以在运行 make:migration 命令时添加 --path 选项,给定的路径必须是相对于应用程序的基本路径。

编辑迁移文件

<?php

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

class CreateSectionTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name','255');
            $table->text('content')->nullable();
            $table->integer('bigclass')->nullable();
            $table->timestamps();
        });
    }

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

迁移文件中有两个方法 up down
up用于创建表或者添加字段
down与up相反

创建表 字段

Schema::create('test', function (Blueprint $table) {
    $table->increments('id');
    $table->timestamps();
});

上面这一段表示
创建test表
创建自增的id字段
创建 相当于可空的 created_at 和 updated_at字段 laravel在对表进行操作时一般会对这两个字段进行自动维护

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

上面这段表示
在表test创建一个可空的email字段 字段类型为varchar
具体字段类型列表查看Laravel文档
nullable()为字段修饰 其他字段修饰类型查看Laravel文档

删除表

若要重命名数据表,可以使用 rename 方法:

Schema::rename($from, $to);

删除一个已存在的数据表, 可使用 drop 或 dropIfExists 方法:

Schema::drop('users');
Schema::dropIfExists('users');

修改字段

先决条件
在修改字段之前,请确保将 doctrine/dbal 依赖添加到 composer.json 文件中。Doctrine DBAL 库用于确定字段的当前状态, 并创建对该字段进行指定调整所需的 SQL 查询:

composer require doctrine/dbal

change 方法可以将现有的字段类型修改为新的类型或修改属性。
比如,你可能想增加。字符串字段的长度,可以使用 change 方法把 name 字段的长度从 25 增加到 50:

Schema::table('test', function (Blueprint $table) {
    $table->string('name', 50)->change();
});

我们应该将字段修改为可空:

Schema::table('test', function (Blueprint $table) {
    $table->string('name', 50)->nullable()->change();
});

{注} 只有下面的字段类型能被 "修改": bigInteger、 binary、 boolean、date、dateTime、dateTimeTz、decimal、integer、json、 longText、mediumText、smallInteger、string、text、time、 unsignedBigInteger、unsignedInteger and unsignedSmallInteger。

重命名字段

可以使用结构生成器上的 renameColumn 方法来重命名字段。在重命名字段前 , 请确保你的 composer.json 文件内已经加入 doctrine/dbal 依赖:

Schema::table('test', function (Blueprint $table) {
    $table->renameColumn('email', 'mail');
});

删除字段

可以使用结构生成器上的 dropColumn 方法来删除字段。 在从 SQLite 数据库删除字段前,你需要在 composer.json 文件中加入 doctrine/dbal 依赖并在终端执行 composer update 来安装该依赖:

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

你可以传递一个字段数组给 dropColumn 方法来删除多个字段:

Schema::table('test', function (Blueprint $table) {
    $table->dropColumn(['email', 'text', 'text2']);
});

执行迁移

php artisan migrate

删除所有表 & 迁移

The migrate:fresh 命令会从数据库中删除所有表,然后执行 migrate 命令:

php artisan migrate:fresh

php artisan migrate:fresh --seed

本文链接:

https://www.antixu.com/archives/371/
1 + 8 =
快来做第一个评论的人吧~