Я использую Sequelize ORM в своем приложении Express с базой данных PostgreSQL.Я записываю отношения таблиц в файлы моделей.Я использую эту команду для создания таблиц.Когда я проверяю таблицы, нет внешнего ключа.
sequelize db:migrate
Я прилагаю модель и пример миграции.В чем моя ошибка?
Member.js model
'use strict';
module.exports = (sequelize, DataTypes) => {
const Member = sequelize.define('Member', {
mname: DataTypes.STRING,
mpassword: DataTypes.STRING,
memail: DataTypes.STRING,
mphoto: DataTypes.STRING,
mrole: DataTypes.STRING,
mlastseen: DataTypes.STRING,
cid: DataTypes.INTEGER
}, {});
Member.associate = function(models) {
// associations can be defined here
Member.belongsTo(models.Company);
Member.belongsToMany(models.Project, {
through: 'ProjectHasMamber',
foreignKey: 'mid',
as: 'mid'
});
Member.hasMany(models.Task, {
foreignKey: 'mid',
as: 'tasks'
});
Member.hasMany(models.Comment, {
foreignKey: 'mid',
as: 'comments'
});
Member.hasMany(models.ChatMessage, {
foreignKey: 'mid',
as: 'chatmessages'
});
Member.hasMany(models.ConversationReply, {
foreignKey: 'mid',
as: 'conversationreplies'
});
};
return Member;
};
Таблица миграции для участников
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Members', {
mid: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
mname: {
type: Sequelize.STRING
},
mpassword: {
type: Sequelize.STRING
},
memail: {
type: Sequelize.STRING
},
mphoto: {
type: Sequelize.STRING
},
mrole: {
type: Sequelize.STRING
},
cid: {
type: Sequelize.INTEGER
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Members');
}
};
Итак, где моя ошибка?Я не привязывал другие модели и миграции.Надеюсь, это ясно с одним примером.Я мог бы использовать SQL-запросы для создания таблиц и отношений.Это решение.Но я хочу сделать это с миграциями.Я попросил Sequelize Slack, но ответа пока нет.Я пытался использовать ключевое слово «ссылки».Это устарело.Благодарю.
Редактировать: Использование «ссылок» в миграции решает проблему.Вот пример:
cid: {
type: Sequelize.UUID,
references: {
//Table name not same name with model, be careful!
model: 'Companies',
key: 'cid'
},
onDelete: 'cascade'
}