简体   繁体   English

Nodejs Sequelize 多对多关系

[英]Nodejs Sequelize Many to many relationship

I am trying to fetch data from DB with sequelize.我正在尝试使用 sequelize 从数据库中获取数据。 The many to many relationships between users and roles.用户和角色之间的多对多关系。 When i fetch the users does not include the roles.当我获取用户时不包括角色。

The code look like:代码如下:

user model用户 model

 // model defines the user objects const userModel = (sequelize, Sequelize) => { const users = sequelize.define("user", { id: { type: Sequelize.STRING, allowNull: false, primaryKey: true, }, firstname: { allowNull: false, type: Sequelize.STRING, }, lastname: { allowNull: false, type: Sequelize.STRING, }, password: { allowNull: false, type: Sequelize.STRING, }, email: { allowNull: false, type: Sequelize.STRING, }, image: { allowNull: true, type: Sequelize.STRING, }, }); //don not show password and id users.prototype.toJSON = function () { let values = Object.assign({}, this.get()); delete values.password; delete values.id; return values; }; return users; }; export default userModel;

Roles model角色 model

 // model defines the events objects const rolesModel = (sequelize, Sequelize) => { const roles = sequelize.define("roles", { id: { type: Sequelize.STRING, allowNull: false, primaryKey: true, }, name: { allowNull: false, type: Sequelize.STRING, }, description: { allowNull: true, type: Sequelize.STRING, }, }); return roles; }; export default rolesModel;

The associations:协会:

 db.users.associate = (db) => { db.users.belongsToMany(db.roles, { through: "userroles", constraints: false, foreignKey: "rolesId", }); }; db.roles.associate = (db) => { db.roles.belongsToMany(db.users, { through: "userroles", constraints: false, foreignKey: "userId", }); };

There are two controller functions that are adding and fetching the user data有两个 controller 函数正在添加和获取用户数据

Controller Controller

 User.create(userDetails).then(() => { let roles = req.body.roles; roles.forEach(async (element) => { let role = await Roles.findByPk(element); if (role) { await Userroles.create({ id: uniqid(), rolesId: element, userId: userId, }); } else { logger.warn(`tried adding to ${userId} a none existent role`); } }); }) // get user let user = await User.findOne({ where: { email: username }, include: { model: db.roles }, });

So the roles are only a empty array when I try getting user details: "firstname": "Mathew", "lastname": "Murimi", "email": "******@gmail.com", "image": null, "createdAt": "2022-02-12T22:56:40.000Z", "updatedAt": "2022-02-12T22:56:40.000Z", "roles": []因此,当我尝试获取用户详细信息时,角色只是一个空数组:“firstname”:“Mathew”、“lastname”:“Murimi”、“email”:“******@gmail.com”、“image “:null,“createdAt”:“2022-02-12T22:56:40.000Z”,“updatedAt”:“2022-02-12T22:56:40.000Z”,“角色”:[]

// Receive the user created in the then, add the id of "newUser" in "userId" // 接收then中创建的用户,在“userId”中添加“newUser”的id

User.create(userDetails)
      .then((**newUser**) => {
        let roles = req.body.roles;
        roles.forEach(async (element) => {
          let role = await Roles.findByPk(element);
          if (role) {
            await Userroles.create({
              id: uniqid(),
              rolesId: element,
              userId: **newUser.id**,
            });
          } else {
            logger.warn(`tried adding to ${**newUser.id**} a none existent role`);
          }
        });
      })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM