如何解决将外键 unsignedBigInteger 字段更改为迁移 Laravel 中的文本字段
我有一个表 foo
和一个像这样的迁移(只显示 up 方法):
public function up()
{
Schema::table('foo',function (Blueprint $table) {
$table->unsignedBigInteger('boo_id');
});
Schema::table('foo',function (Blueprint $table) {
$table->foreign('boo_id')->references('id')->on('boos');
});
}
所以我在 boo_id
上有一个 boos.id
外键。现在我想创建一个迁移,将字段 boo_id
更改为文本而不是外键。我该怎么做?
解决方法
您首先需要删除外键和为外键创建的索引,然后更改列的数据类型。像这样的迁移会有所帮助:
public function up()
{
Schema::table('foo',function (Blueprint $table) {
$table->dropForeign('foo_boo_id_foreign');
$table->dropIndex('foo_boo_id_foreign');
});
Schema::table('foo',function (Blueprint $table) {
$table->text('boo_id')->change();
});
}
请注意,它们必须在两个单独的 Schema::table
主体中,否则您将遇到错误:Syntax error or access violation: 1170 BLOB/TEXT column 'boo_id' used in key specification without a key length (SQL: ALTER TABLE foo CHANGE boo_id boo_id TEXT DEFAULT NULL)
。另请注意,传递给 dropForeign
和 dropIndex
函数的名称对您来说可能不同,您应该在数据库中检查以确保,因为该命名约定不是强制性的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。