如何将具有外键的列修改为 null?
Posted
技术标签:
【中文标题】如何将具有外键的列修改为 null?【英文标题】:How do I modify a column to null that has foreign key? 【发布时间】:2019-06-18 05:53:44 【问题描述】:我必须将user_id列的类型从accounts改为nullable,但它是用户id列的外键,应该如何正确完成?
我正在与Laravel 5.6.27
和mysql 5.6
合作,
我尝试使用门面的功能,但它不起作用。
现在我正在测试这些语句,我有这个错误:
在 Connection.php 第 664 行: SQLSTATE [HY000]:一般错误:1025 将“./gonano/#sql-c_b”重命名为“./gonano/accounts”时出错(错误号:150 - 键约束格式不正确)(SQL:ALTER TABLE 帐户更改user_id user_id INT DEFAULT NULL)
创建用户表:
public function up(): void
Schema::create('users', function (Blueprint $table): void
$table->increments('id');
$table->string('first_name', 100);
$table->string('last_name', 100);
$table->string('email')->unique();
$table->bigInteger('cuit')->unsigned();
$table->string('password');
$table->enum('status', ['activated', 'blocked'])->default('activated');
$table->integer('country_id')->unsigned()->references('id')->on('countries');
$table->timestampsTz();
);
create_accounts_table:
public function up(): void
Schema::create('accounts', function (Blueprint $table): void
$table->bigIncrements('id');
$table->string('address')->default('');
$table->integer('user_id')->index()->unsigned();
$table->integer('system_id')->index()->unsigned()->default(0);
$table->foreign('user_id')->references('id')->on('users');
$table->timestampsTz();
);
change_user_id_to_nullable_in_accounts:
public function up()
Schema::disableForeignKeyConstraints();
DB::table('accounts')->truncate();
Schema::table('accounts', function (Blueprint $table): void
$table->integer('user_id')->nullable()->change();
);
Schema::enableForeignKeyConstraints();
我需要 user_id 可以为空,但我无法实现,谢谢帮助
【问题讨论】:
Migration: Cannot add foreign key constraint in laravel的可能重复 【参考方案1】:创建新的迁移以使您的 user_id 可以为空。
并将此代码粘贴到您的迁移中。
public function up()
\Illuminate\Support\Facades\DB::statement('SET FOREIGN_KEY_CHECKS=0;');
\Illuminate\Support\Facades\DB::table('accounts')->truncate();
Schema::table('accounts', function (Blueprint $table)
$table->integer('user_id')->nullable()->change();
);
\Illuminate\Support\Facades\DB::statement('SET FOREIGN_KEY_CHECKS=1;');
【讨论】:
或按照手册中的建议使用 \Illuminate\Support\Facades\Schema::disableForeignKeyConstraints(),然后使用 \Illuminate\Support\Facades\Schema::enableForeignKeyConstraints() 感谢您的回答 Prathamesh 和 Indra,但我遇到了一个新错误。我用新错误更新了问题 @PrathameshDoke 我也更新了问题中的代码以上是关于如何将具有外键的列修改为 null?的主要内容,如果未能解决你的问题,请参考以下文章