【问题标题】:SequelizeEagerLoadingError: Role is not associated to UserSequelizeEagerLoadingError:角色未与用户关联
【发布时间】:2019-07-29 15:44:58
【问题描述】:

我正在使用带有 MYSQL 和 express 的 Sequelize。 我在尝试使用 include 从相关模型中选择数据时收到 SequelizeEagerLoadingError: Role is not associated to User

我有两个模型,用户和角色。一个用户通过 RoleUser 属于ToMany 角色,一个角色通过 RoleUser 属于多个用户。这是我的模型:

//用户模型

'use strict';

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    id: {type:DataTypes.UUID,allowNull:false,unique:true,primaryKey:true},
    UserName: {type:DataTypes.STRING,unique:true,allowNull:false},
     Email: {type:DataTypes.STRING,allowNull:false,unique:true,validate: { isEmail: {msg: "Invalid Email"} }},
    Password: {type:DataTypes.STRING,allowNull:false},

  }, {});
  User.associate = function(models) {


        User.belongsToMany(models.Role,
            {
        through: 'RoleUser',
        foreignkey:'UserId'

    })




 };
  return User;
};

//Role Model
'use strict';
module.exports = (sequelize, DataTypes) => {
  const Role = sequelize.define('Role', {
    id: {type:DataTypes.UUID,allowNull:false,unique:true,primaryKey:true},
    Name: DataTypes.STRING,
    Description: DataTypes.STRING
  }, {});
  Role.associate = function(models) {
    Role.belongsToMany(models.User,
        {
            through:'RoleUser',
            foreignKey:'RoleId'

        }),


  };
  return Role;
};

//My query on user model

xports.index = function(req, res) {
  return User.findAll({ 
          include: [{
          model: Role,

        }],

    attributes:{
        exclude: ['Password','createdAt','updatedAt']

    }}).then((users)=>{
    console.log(users)
    }).catch(error=>{
    console.log(error);
    })

//错误

 SequelizeEagerLoadingError: Role is not associated to User!

 **STATUS CODE: 200(OK)**

 I am getting same error in other models in the entire project. According to me the associations is correctly established and I can see in the PHPMyAdmin Relation View.

 *Express Version: 4.16.4
 Sequelize Version: 4.31.2
 Mysql2 version: 1.6.1*

 Any help. What am I doing wrong.

【问题讨论】:

    标签: mysql sequelize.js associations


    【解决方案1】:

    好的,所以你需要指定如何调用包含。

    User.associate = function(models) {
      User.belongsToMany(models.Role,{
        through: 'RoleUser',
        foreignkey:'UserId',
        as: 'Roles'
      })
    };
    

    如果需要,您需要以其他方式从角色到用户,以及任何其他关联。然后在您的查询中:

    User.findAll({ 
      include: [{
        model: Role,
        as: 'Roles'
      }],
      attributes:{ exclude: ['Password','createdAt','updatedAt'] }
    })
    

    【讨论】:

    • 感谢您帮助我。但我仍然得到完全相同的错误。我的关联看起来不错,但它对我不起作用。
    • @wafutech 我遇到了同样的问题……你是怎么解决的?最好的
    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2015-05-23
    • 2020-09-02
    • 1970-01-01
    • 2016-08-26
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多