【问题标题】:Laravel Migrations - Dropping columnsLaravel 迁移 - 删除列
【发布时间】:2018-01-30 20:42:50
【问题描述】:

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

起初我通过执行composer require doctrine/dbal 后跟composer update 安装doctrine/dbal,如documentation 中所述。

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

php artisan make:migration remove_user_domain_name_from_clients --table=clients

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

<?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.

【问题讨论】:

    标签: php laravel symfony doctrine-orm


    【解决方案1】:

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

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

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

    down 函数中你应该做相反的事情,将列添加回来:

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

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

    【讨论】:

    • 我认为dropIfExists 函数只适用于整个表格。
    • 谢谢!我试过了,现在我得到了Call to undefined method Illuminate\Database\Schema\MySqlBuilder::dropColumn() 我尝试解决这个问题然后我再次尝试你的解决方案。
    • 你用过我贴的代码吗?因为在您的示例中,您在 Schema 类上静态使用该函数,这将不起作用。
    • 不要使用dropIfExists('column') 删除整个表! @杰夫
    【解决方案2】:

    要 dropColumn ,你可以这样做

    在你的向下功能中应该有:

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

    然后运行 php artisan 迁移:回滚

    就是这样。

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 2017-09-03
      • 2016-09-11
      • 2019-06-12
      • 2015-08-08
      • 2015-08-05
      • 2019-01-22
      • 2017-11-17
      • 2017-10-19
      相关资源
      最近更新 更多