Laravel Migrations - 删除列

Bla*_*ack 4 php symfony doctrine-orm laravel

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

起初我doctrine/dbal通过执行composer require doctrine/dbal后安装composer update,如文档中所述.

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

php artisan make:migration remove_user_domain_name_from_clients --table=clients
Run Code Online (Sandbox Code Playgroud)

我添加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');
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我明白了

Migrating: 2017_08_22_135145_remove_user_domain_name_from_clients
Migrated:  2017_08_22_135145_remove_user_domain_name_from_clients
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*dev 14

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

所以,在你的up函数中应该有:

Schema::table('clients', function (Blueprint $table) {
    $table->dropColumn('UserDomainName');
});
Run Code Online (Sandbox Code Playgroud)

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

Schema::table('clients', function (Blueprint $table) {
    $table->string('UserDomainName');
});
Run Code Online (Sandbox Code Playgroud)

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

  • 不要使用`dropIfExists('column')`来删除整个表!@杰夫 (3认同)
  • 我认为`dropIfExists`函数仅适用于整个表。 (2认同)