我尝试以这样的方式关联表:
- 一个组有许多文档
- 文档属于组
- 组属于用户
- 一个用户有多个组
当我尝试列出所有从表'组'包括'用户',抛出一个错误说,用户是没有关联到组。
我的机型:
Document.js
const Document = conn.define('document', {
title: {
type: Sequelize.TEXT,
allowNull: false
},
content: {
type: Sequelize.TEXT,
allowNull: false
},
footer: {
type: Sequelize.TEXT,
}
})
Document.sync()
Document.associate = (models) => {
Document.belongsTo(models.Group, {foreignKey: 'groupId', as: 'Group'})
}
module.exports = Document
Group.js
const Group = conn.define('group', {
name: {
type: Sequelize.STRING,
allowNull: false
},
})
Group.sync()
Group.associate = (models) => {
Group.hasMany(models.Document, {foreignKey: 'groupId', as: 'Document'})
Group.belongsTo(models.User, {foreignKey: 'userId', as: 'User'})
}
module.exports = Group
User.js
const User = conn.define('user', {
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
},
password: {
type: Sequelize.STRING
},
})
User.sync()
User.associate = (models) => {
User.hasMany(models.Group, {foreignKey: 'groupId', as: 'Group'})
}
module.exports = User
1条答案
按热度按时间hiz5n14c1#
我在你的代码中发现了一个错误。对于一对多的关系,应使用相同的外键名。否则,数据库中将有两个不同的列。
这里应该使用
userId
作为外键。Sequelize在belongsTo
模型中创建id列。因此,如果您像这样使用它,则在Group
模型中会有一个userId
:另外,尽量不要在模型文件中创建关联。考虑使用index.js文件,您可以在其中创建所有关联。
将您的模型定义保存在其文件中。导出创建的模型类。请将它们包含在
index.js
文件中。创建必要的关联并再次导出它们。src/models/index.js