Laravel 迁移 - 删除列
Posted
技术标签:
【中文标题】Laravel 迁移 - 删除列【英文标题】:Laravel Migrations - Dropping columns 【发布时间】: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.
【问题讨论】:
【参考方案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 迁移:回滚
就是这样。
【讨论】:
以上是关于Laravel 迁移 - 删除列的主要内容,如果未能解决你的问题,请参考以下文章