嗨,我正在使用 laravel 10,想要向现有表添加外键
public function up(): void
{
Schema::disableForeignKeyConstraints();
Schema::table('channels', function (Blueprint $table) {
$table->foreignIdFor(App\Models\User::class)
->after('name')
->constrained();
});
Schema::enableForeignKeyConstraints();
}
public function down(): void
{
Schema::table('channels', function (Blueprint $table) {
$table->dropForeign(['user_id']);
$table->dropColumn('user_id');
});
}
我使用命令 Schema::disableForeignKeyConstraints() 禁用了外键验证,但仍然收到错误。
SQLSTATE[HY000]:一般错误:1 无法添加默认值为 NULL 的 NOT NULL 列(连接:sqlite,SQL:alter table "channels" add 列“user_id”整数不为空)
请告诉我如何解决
问题是您想要创建一个外键,它会转换为一个更改,将添加/修改列使其不可为空,但默认值为空。
您可以明确声明非空默认值,例如
->default(0)
或将列设置为可为空
->nullable()