Создайте таблицу и добавьте индексы в одну миграцию с помощью Sequelize
Каков правильный способ создания таблицы и добавления индексов на некоторые из ее столбцов в один перенос?
Пример миграции: 2012341234-create-todo.js
Как создать индекс в столбце "author_id" и "title"?
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Todos', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
author_id: {
type: Sequelize.INTEGER,
onDelete: 'CASCADE',
references: {
model: 'Authors',
key: 'id',
as: 'authorId'
}
},
title: {
type: Sequelize.STRING
},
content: {
type: Sequelize.TEXT
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Todos');
}
};
В документах Sequelize указывается, что индекс будет добавлен следующим образом:
queryInterface.addIndex('Todos', ['author_id', 'title']);
Могут ли эти методы быть скованными? "Вверх" и "вниз" просто нужно вернуть обещание? Я ничего не вижу в документах об этом.
Ответы
Ответ 1
Да, методы могут быть прикованы. В вашем случае вы просто выполняете addIndex
после метода createTable
return queryInterface.createTable('Todos', {
// columns...
}).then(() => queryInterface.addIndex('Todos', ['author_id', 'title']))
.then(() => {
// perform further operations if needed
});
Ответ 2
Я создал совершенно новый файл миграции, используя сырой синтаксис
module.exports = {
up: (queryInterface) => {
return queryInterface.sequelize.query('CREATE INDEX devices_mac_uuid ON
"Devices" ("mac","uuid")')
},
down: (queryInterface) => {
return queryInterface.sequelize.query('DROP INDEX devices_mac_uuid')
}
}