Laravel Migrations - 删除列

时间:2017-08-22 13:57:39

标签: php laravel symfony doctrine-orm

我需要从数据库表UserDomainName中删除列clients

首先,我执行了doctrine/dbal,然后执行了composer require doctrine/dbal composer update,如documentation中所述。

然后我创建了我想用来删除列的迁移:

php artisan make:migration remove_user_domain_name_from_clients --table=clients

我在Schema::dropColumn('UserDomainName');方法中添加了down()

<?php

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

class RemoveDomainName extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('clients', function (Blueprint $table) {
            //
        });
    }

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

然而,我得到了

Migrating: 2017_08_22_135145_remove_user_domain_name_from_clients
Migrated:  2017_08_22_135145_remove_user_domain_name_from_clients

执行php artisan migrate但没有删除列。 如果我再次执行它,我会得到Nothing to migrate.

2 个答案:

答案 0 :(得分:10)

down函数用于回滚,您必须在dropColumn函数中添加此up,因为它是您在运行迁移时要执行的操作。

因此,在您的up函数中应该有:

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

down函数中你应该反过来,添加列:

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

这样,您始终可以返回到迁移中的任何位置。

答案 1 :(得分:0)

要 dropColumn ,你可以这样做

在你的 down 函数中应该有:

 public function down()
    {
        Schema::table('products', function (Blueprint $table) {
            $table->dropColumn('UserDomainName');
        });
    }

然后运行 php 工匠迁移:回滚

就是这样。