Laravel 迁移 - 删除列

2022-08-30 20:30:28

我需要从数据库表中删除该列。UserDomainNameclients

起初,我通过执行安装,然后执行 ,如文档中所述。doctrine/dbalcomposer require doctrine/dbalcomposer update

然后,我创建了要用于删除列的迁移:

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 migrateNothing to migrate.


答案 1

该函数用于回滚,您必须将其添加到函数中,因为它是您在运行迁移时要执行的操作。downdropColumnup

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

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

在函数中,您应该执行相反操作,将列添加回去:down

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

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


答案 2

要 dropColumn,你可以像这样做

在你的向下函数中,应该有:

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

然后运行 php artisan migrate:rollback

就是这样。


推荐