数据库 – 如何使用Laravel架构构建器更改列类型?

前端之家收集整理的这篇文章主要介绍了数据库 – 如何使用Laravel架构构建器更改列类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要从整数更改为外键两个字段.如何建立我的迁移这样做?
Schema::create('messages',function($table)
{
    $table->increments('id');
    $table->integer('sender');
    $table->integer('recipient');
    $table->string('title');
    $table->longtext('body');
    $table->timestamps();
    $table->softDeletes();
    $table->integer('regarding');
});

我将发件人更改为sender_id,收件人更改为recipient_id,并将关于_id.

解决方法

我遇到了类似的问题,需要将列类型从字符串更改为整数.我使用两个单独的迁移(每个都有一个RAW sql语句)来管理它来获取解决方案.

此外,与Postgres和MysqL一起工作,因为我们正在转移中.

第一次迁移:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('plans',function(Blueprint $table)
    {
        //
        $table->mediumInteger('duration_change_type')->default(0)->after('duration');
    });

    if (Config::get('database')['default'] === 'MysqL'){
        // MysqL 
        DB::statement('update plans set duration_change_type=duration');

    } else if (Config::get('database')['default'] === 'pgsql'){
        // Postgresql
        DB::statement('update plans set duration_change_type=duration::integer');
    }
}

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

第二次迁移:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('plans',function(Blueprint $table)
    {
        //
        $table->dropColumn('duration');
        $table->renameColumn('duration_change_type','duration');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('plans',function(Blueprint $table)
    {
        // Rollback to string
        $table->string('duration_change_type')->default(0)->after('duration');
    });
    if (Config::get('database')['default'] === 'MysqL'){
        // MysqL 
        DB::statement('update plans set duration_change_type=duration');

    } else if (Config::get('database')['default'] === 'pgsql'){
        // Postgresql
        DB::statement('update plans set duration_change_type=duration::text');
    }
}

现在思考,可以简化为一次迁移.

猜你在找的MsSQL相关文章