Adonis.js: Как выполнить миграцию с обновлением данных?
Всем привет!
Создал три таблицы: client, pet и связующую client_pet. Однако идея поменялась и теперь необходимо изменить имеющееся отношение "многие ко многим" на "многие к одному" с сохранением ассоциаций.
Окей, вроде не сложно:
- Нужно добавить в pet столбец
client_id, пока что nullable - Далее выбрать всех питомцев, все связи и заполнить
client_idкаждого питомца (благо все они имеют только одного хозяина) - Столбец
client_idвpetсделать "ненуллабельным" - Удалить таблицу
client_pet
Сказано - сделано:
class PetSchema extends Schema {
async up () {
await this.table('pet', (table) => {
table.integer('client_id').unsigned().after('id')
.references('id').inTable('client')
.onDelete('restrict').onUpdate('restrict')
})
const pets = await DB.table('pet').select()
const assoc = await DB.table('client_pet').select()
for (let i = 0; i < pets.length; i++) {
const petId = pets[i].id
for (let j = 0; j < assoc.length; j++)
if (assoc[j].pet_id == petId) {
await DB.table('pet')
.where('id', petId)
.update('client_id', assoc[j].client_id)
break
}
}
await this.table('pet', (table) => {
table.alter('client_id').notNullable()
})
}
down () {
this.table('pet', (table) => {
table.dropForeign('client_id')
table.dropColumn('client_id')
})
}
}
Вроде всё логически верно и await-ами схвачено, но всё-равно средний код умудряется сработать раньше! И конечно же это ошибка, попытка обновить столбец client_id, которого ещё нет. Что с моим кодом может быть не так?