NodeJS 节点-将表与Sequelize关联

a7qyws3x  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(194)

我尝试以这样的方式关联表:

  • 一个组有许多文档
  • 文档属于组
  • 组属于用户
  • 一个用户有多个组

当我尝试列出所有从表'组'包括'用户',抛出一个错误说,用户是没有关联到组。

我的机型:

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
hiz5n14c

hiz5n14c1#

我在你的代码中发现了一个错误。对于一对多的关系,应使用相同的外键名。否则,数据库中将有两个不同的列。
这里应该使用userId作为外键。Sequelize在belongsTo模型中创建id列。因此,如果您像这样使用它,则在Group模型中会有一个userId

User.hasMany(Group, {foreignKey: 'userId', as: 'Group'});
Group.belongsTo(User, {foreignKey: 'userId', as: 'User'});

另外,尽量不要在模型文件中创建关联。考虑使用index.js文件,您可以在其中创建所有关联。

src
    app.js
    models
        index.js
        user.js
        group.js
        document.js

将您的模型定义保存在其文件中。导出创建的模型类。请将它们包含在index.js文件中。创建必要的关联并再次导出它们。
src/models/index.js

const User = require('./user');
const Group = require('./group');
const Document = require('./document');

User.hasMany(Group, {foreignKey: 'userId', as: 'Group'});
Group.belongsTo(User, {foreignKey: 'userId', as: 'User'});

// Define what associations you need.

module.exports = {
    User,
    Group,
    Document
};

相关问题