[开发编程]Laravel框架 数据库迁移文件案例


Laravel框架 数据库迁移文件简单例子

1. 创建数据表

<?php

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

class CreateTableNameTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // 建议先判断数据表是否创建
        if (!Schema::hasTable('table_name')) {
            Schema::create('table_name', function (Blueprint $table) {
                // 默认创建名为"id"的bigint(20)的自增无符号主键字段
                $table->id();
                // 自增字段,默认为主键.也可用->primary()设置;
                // $table->increments('primary_id')->comment('主键ID');
                // $table->integer('primary_id')->unsigned()->primary()->comment('主键ID'); // 同上作用
                $table->string('string', 50)->nullable(true)->default('')->comment('varchar类型字段,可空');
                $table->char('last_ip', 15)->default('')->comment('char类型字段');
                $table->integer('int')->default(0)->comment('int类型字段,默认10位');
                $table->tinyInteger('tinyint')->default(0)->comment('tinyint类型字段,默认3位');
                $table->unsignedInteger('unsigned_int')->default(0)->comment('无符号int类型字段,默认10位');
                // $table->integer('int')->unsigned()->default(0)->comment('无符号int类型字段,默认10位'); // 同上的作用
                $table->unsignedTinyInteger('unsigned_tinyint')->default(0)->comment('无符号tinyint类型字段,默认3位');
                // $table->tinyInteger('tinyint')->unsigned()->default(0)->comment('无符号tinyint类型字段,默认3位'); // 同上的作用
                // 设置大于10位的整数建议使用bigint类型
                $table->bigInteger('big_int')->nullable(false)->default(0)->comment('bigint类型字段,不能为空,,默认20位');
                // 创建时间
                $table->timestamp('paid_at')->nullable(true);
                // 自动创建两个额外的列,即created_at和updated_at。这些列用于记录模型的创建时间和最后更新时间。timestamp类型
                $table->timestamps();
                // 用于实现软删除功能。当你调用模型的delete()方法时,该记录的deleted_at列会被设置为当前时间戳,表示该记录已被删除。软删除可以帮助你保留数据的完整性,并且可以方便地恢复或永久删除记录。
                $table->softDeletes();
                // 创建索引
                $table->index('string');
                // $table->index('int', 'unique');// 唯一索引
            });
            // 数据表的注释只能额外处理
            DB::statement(sprintf(
                "ALTER TABLE `%s%s` comment'%s'",
                config('database.connections.mysql.prefix'),
                'table_name',
                '创建案例表'
            ));
        }
    }

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

2. 新增数据表字段

<?php

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

class AddColumnNameToTableName extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // 判断字段是否存在,按需自取
        // 可以添加多个字段
        // Schema::hasColumn('table_nam', 'column_name')
        Schema::table('table_nam\e', function (Blueprint $table) {
            // 创建一个名为 column_name 的varchar类型字段,将其放置在 paid_at 字段之后,并设置默认值为空字符串;
            $table->string('column_name')->after('paid_at')->default('')->comment('');
            // 创建一个名为 share_num 的bigint字段,将其放置在 column_name 字段之后,设置默认值为 0,并添加注释为 "点赞数"。
            $table->bigInteger('share_num')->after('column_name')->default('0')->comment('点赞数');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('table_nam\e', function (Blueprint $table) {
            $table->dropColumn('column_name');
            $table->dropColumn('share_num');
        });
    }
}

3. 修改数据表字段

<?php

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

class AlterTableNameTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // 在修改字段之前,请确保你已经通过 Composer 包管理器安装了 doctrine/dbal 包。
        // Doctrine DBAL 库用于确定字段的当前状态, 并创建对该字段进行指定调整所需的 SQL 查询
        Schema::table('table_name', function (Blueprint $table) {
            // 一定要调用change()返回,不然默认是创建
            $table->string('column_name')->after('paid_at')->comment('修改')->change();
            $table->bigInteger('share_num')->default(10)->change();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('table_name', function (Blueprint $table) {
            //
        });
    }
}

4. 删除数据表字段

<?php

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

class RemoveColumnNameFromTableNameTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('table_name', function (Blueprint $table) {
            //删除单个
            $table->dropColumn('column_name');
            //删除多个
            $table->dropColumn(['big_int', 'paid_at']);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('table_name', function (Blueprint $table) {
            //
        });
    }
}

5. 特别说明

新增/修改/删除字段都是操作同一数据表,up()方法内的代码可以整合在一起,如果有需求的话。

声明:Hyouka' s Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - [开发编程]Laravel框架 数据库迁移文件案例


在卑微中成长