首页 文章

Sequelize.js渴望在多对多表中加载

提问于
浏览
1

我有两个表,用户和MControllers . 它们通过另一个名为History的表具有多对多关系,定义如下:

var History = sequelize.define("History", {
id: {
  type: DataTypes.INTEGER,
  primaryKey: true,
  autoIncrement: true
},
message: {
  type : DataTypes.STRING,
  allowNull : false
}
}, {
timestamps: true,
updatedAt: false,
classMethods: {
  associate: function(models) {
  }
}
});

我做了这样的协会:

MController.belongsToMany(User, {through: History, onDelete: 'cascade' });
User.belongsToMany(MController, {through: History, onDelete: 'cascade' });

现在,我需要使用User表的eager-loading来查询History表 . 像这样的东西:

historyEntity.findAll({
        where : {
            MControllerId : mcontrollerId
        },
        include : {
            model : this.User
        }
    });

但我收到以下错误:

[Error: User is not associated to History!]

如果我检查历史模型,它实际上没有任何关联 . 如何使此查询成为可能?

编辑:我试图查询Users表,急切加载历史表,但没有成功 . 它告诉我,用户与历史记录无关,事实并非如此,因为我已经检查了用户模型并且它说:

{ History: [Object],
    UserMController: [Object],
    OauthAccessTokensUsers: [Object],
    OauthRefreshTokensUsers: [Object] },

2 回答

  • 1

    在讨论了你的需求@Renan后,我建议将 User 模型与 MController 关联两次,一个为 User ,另一个为 Activator .

    // normal users
    MController.belongsToMany(User, {through: 'MControllerUsers', onDelete: 'cascade' });
    User.belongsToMany(MController, {through: 'MControllerUsers', onDelete: 'cascade' });
    
    // activator users
    MController.belongsToMany(User, {through: 'MControllerActivators', onDelete: 'cascade', as: 'Activator' });
    User.belongsToMany(MController, {through: 'MControllerActivators', onDelete: 'cascade', as: 'Activator' });
    

    通过这种方式,您可以将相同的模型 User 链接到 MController 并具有两个不同的角色,允许您为每个MController提供多个 UserActivator s

  • 0

    看着你的协会,为什么你有 models.User 而在其他地方只有 User ?检查是否修复了某些问题 .

    如果没有,我就是在解决这个问题

    History.hasOne(MController); History.hasOne(User);

相关问题