Как обновить ограничение в миграции - PullRequest
0 голосов
/ 04 марта 2020

Мне нужно добавить каскад onDelete и onUpdate к ограничению в файле миграции.

Итак, я сделал таблицу изменений, выбрав внешние ключи и связав их с методом 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

Как я могу обновить ограничение таблицы в миграции?

1 Ответ

1 голос
/ 06 марта 2020

Сначала я должен удалить столбец внешнего ключа, а затем создать его снова.

Мы можем сделать это с Произвольным кодом в миграциях

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

...