我在带有PostgreSQL数据库的Express应用程序中使用Sequelize ORM。我将表关系写在模型文件中。我使用此命令创建表。当我检查表时,没有外键。
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'
}