Ответ 1
Случай 1: Инициализация базы данных
Если ваша цель заключается в добавлении отношений во время инициализации структуры базы данных, лучше просто использовать метод sync
вместо того, чтобы вручную добавлять их с помощью миграции. Если ваши модели правильно спроектированы и определены отношения, они будут созданы автоматически во время выполнения метода sync
.
Взгляните на пример сиквелизуйте пример. В каталоге моделей у вас есть три файла:
-
index.js
- который включает все модели -
task.js
- модель задачи -
user.js
- модель пользователя
Посмотрите содержимое task.js
, начиная с строки 7, следующий код создает связь между моделями User и Task:
classMethods: {
associate: function(models) {
Task.belongsTo(models.User, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
}
}
Если вы правильно подготовили свои отношения в файлах моделей, синхронизация создаст для вас внешние ключи. В этом случае миграции не нужны.
Я рекомендую вам прочитать весь экспресс-пример readme.md
и просмотреть файлы репозитория, чтобы увидеть, как все работает с выражением и секьюритизацией.
Случай 2: миграция структуры базы данных
Если у вас уже есть некоторые данные, которые вы хотите сохранить, вам нужно использовать миграцию script, потому что единственный способ синхронизации вашей базы данных - полностью уничтожить ее вместе со всеми ее данными.
Вы можете прочитать об основных переходах в документах sequelize. К сожалению, документы не охватывают создание отношения. Предположим, вы хотите создать следующее отношение: Пользователь принадлежит группе. Чтобы создать столбец с пользовательской стороны отношения, вы можете использовать метод addColumn
.
queryInterface.addColumn(
'user',
'group_id',
{
type: Sequelize.INTEGER,
allowNull: true
}
)
К сожалению, пока нет хорошей функции для создания ограничения внешнего ключа для вас, но вы можете сделать это вручную, используя метод secelize query. Пример Postgresql:
queryInterface.sequelize.query("ALTER TABLE user
ADD CONSTRAINT user_group_id_fkey FOREIGN KEY (group_id)
REFERENCES group (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;");
Изменить: добавлен пример миграции структуры базы данных