Sequelize有很多关联问题

时间:2015-05-19 12:07:31

标签: mysql sequelize.js

在我的应用程序中,用户可以有多个module存储在user_has_module表中。这意味着,对于每个user_has_module行,我希望在module匹配的位置加入module_id

模块

Module = sequelize.define('module', {
    academy_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
    },
    module_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
    },
    module_module_type_id: DataTypes.INTEGER,
    sort_number: DataTypes.INTEGER,
    score_to_pass: DataTypes.INTEGER
    }, {
        freezeTableName: true
    })

user_has_module

User_has_module = sequelize.define('user_has_module', {
     user_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     module_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     academy_team_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     academy_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
     },
     sort_number: DataTypes.INTEGER,
     is_complete: DataTypes.INTEGER,
     score_to_pass: DataTypes.INTEGER,
     is_open: DataTypes.INTEGER,
     deadline: DataTypes.DATE
}, {
   freezeTableName: true
})

我的关系

User_has_module.belongsTo(Module, {foreignKey: 'module_id'});

现在我要做的就是加入module.module_id = user_has_module.module_id

我的问题是module有两个primary key,当sequelize连接这两个表时,它会选择academy_id作为primary key。< / p>

我的问题是,有没有办法告诉Sequelize在这种关系中,它必须从primary key中选择module_id module

1 个答案:

答案 0 :(得分:1)

我认为您不需要名为User_has_module的模型。 我假设您有一个名为User的模型和一个模型调用模块。

所以你应该设计这样的东西:

var User = sequelize.define("User", {
        name: DataTypes.STRING
    }, {
        classMethods: {
            associate: function(models) {
                User.hasMany(models.Module);
            }
        }
    });

对于你的模块:

var Module = sequelize.define("Module", {
        name: DataTypes.STRING
    }, {
        classMethods: {
            associate: function(models) {
                Module.belongsToMany(models.User);
            }
        }
    });

要获得用户的模块,您可以这样做:

models.User.findAll({ include: [models.Module]}).then(function(users){
        console.log(users);
    });

希望我的问题是对的,这有帮助。 干杯