如何更新迁移中的约束
How to update a constraint in a migration
我需要将 onDelete 和 onUpdate 级联添加到迁移文件中的约束。
所以我做了一个改变 table,选择外键并在每个命令的末尾使用 alter 方法链接。
class UpdateRecipientSchema extends Schema {
up () {
this.alter('deliveries', (table) => {
table.integer('recipient_id')
.unsigned()
.references('id')
.inTable('recipients')
.onDelete('CASCADE')
.onUpdate('CASCADE')
.notNullable()
.alter()
table.integer('courier_id')
.unsigned()
.references('id')
.inTable('couriers')
.notNullable()
.onDelete('CASCADE')
.onUpdate('CASCADE')
.alter()
})
}
down () {
this.alter('deliveries', (table) => {
table.integer('recipient_id')
.unsigned()
.references('id')
.inTable('recipients')
.notNullable()
.alter()
table.integer('courier_id')
.unsigned()
.references('id')
.inTable('couriers')
.notNullable()
.alter()
})
}
}
但是我收到一条错误消息,指出此关系的约束已经存在。错误:constraint "deliveries_courier_id_foreign" for relation "deliveries" already exists
如何在迁移中更新 table 的约束?
首先我必须删除外键列,然后重新创建它。
我们可以在迁移中使用任意代码来做到这一点
await Database.raw('DROP FOREIGN KEY deliveries_courier_id_foreign')
// And now recreate it
await Database.raw('...')
我们也可以使用this.schedule函数来执行多个东西https://adonisjs.com/docs/4.1/migrations#_executing_arbitrary_code
感谢在 Adonis 论坛帮助我的人 https://forum.adonisjs.com/t/how-to-update-a-constraint-in-a-migration/5835
我需要将 onDelete 和 onUpdate 级联添加到迁移文件中的约束。
所以我做了一个改变 table,选择外键并在每个命令的末尾使用 alter 方法链接。
class UpdateRecipientSchema extends Schema {
up () {
this.alter('deliveries', (table) => {
table.integer('recipient_id')
.unsigned()
.references('id')
.inTable('recipients')
.onDelete('CASCADE')
.onUpdate('CASCADE')
.notNullable()
.alter()
table.integer('courier_id')
.unsigned()
.references('id')
.inTable('couriers')
.notNullable()
.onDelete('CASCADE')
.onUpdate('CASCADE')
.alter()
})
}
down () {
this.alter('deliveries', (table) => {
table.integer('recipient_id')
.unsigned()
.references('id')
.inTable('recipients')
.notNullable()
.alter()
table.integer('courier_id')
.unsigned()
.references('id')
.inTable('couriers')
.notNullable()
.alter()
})
}
}
但是我收到一条错误消息,指出此关系的约束已经存在。错误:constraint "deliveries_courier_id_foreign" for relation "deliveries" already exists
如何在迁移中更新 table 的约束?
首先我必须删除外键列,然后重新创建它。
我们可以在迁移中使用任意代码来做到这一点
await Database.raw('DROP FOREIGN KEY deliveries_courier_id_foreign')
// And now recreate it
await Database.raw('...')
我们也可以使用this.schedule函数来执行多个东西https://adonisjs.com/docs/4.1/migrations#_executing_arbitrary_code
感谢在 Adonis 论坛帮助我的人 https://forum.adonisjs.com/t/how-to-update-a-constraint-in-a-migration/5835