我需要从数据库表clients
中删除列UserDomainName
。
首先,我通过执行composer require doctrine/dbal
和composer update
来安装doctrine/dbal
,如文档中所述。
然后,我创建了要用于删除列的迁移:
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.
3条答案
按热度按时间hwamh0ep1#
down
函数用于回滚,必须在up
函数中添加此dropColumn
,因为它是运行迁移时要执行的操作。因此,在
up
函数中应该有:在
down
函数中,您应该执行相反的操作,将列添加回去:这样,您始终可以返回到迁移过程中的任何点。
mf98qq942#
溶液1:使用单线解决方案
此解决方案已在Laravel 9.x上测试,可能无法在较低版本中运行
在迁移文件的
down
方法中,使用Schema::dropColumns
方法,第一个参数是表名,第二个参数是要放入数组中的列名。参考文献
解决方案2:旧方法
这里,
$table->dropColumn
接受数组或字符串形式的列名。hgncfbus3#
要删除列,您可以这样做
在down函数中应该有:
然后运行php artisan migrate:rollback
就这样了