Sequelize hasMany关联问题
Sequelize hasMany association issue
在我的应用程序中,一个用户可以有多个 module
,它们存储在 user_has_module
table 中。这意味着对于每个 user_has_module
行,我想在 module_id
匹配的地方包含 module
。
模块
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 加入这两个 table 时,它选择 academy_id
作为它的primary key
.
我的问题是,有没有办法告诉 Sequelize
在这个关系中它必须从 module
中选择 primary key
module_id
?
我认为您不需要名为 User_has_module 的模型。
我假设您有一个名为 User 的模型和一个名为 Module 的模型。
所以你应该设计成这样:
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);
});
希望我答对了您的问题并且对您有所帮助。
干杯
在我的应用程序中,一个用户可以有多个 module
,它们存储在 user_has_module
table 中。这意味着对于每个 user_has_module
行,我想在 module_id
匹配的地方包含 module
。
模块
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 加入这两个 table 时,它选择 academy_id
作为它的primary key
.
我的问题是,有没有办法告诉 Sequelize
在这个关系中它必须从 module
中选择 primary key
module_id
?
我认为您不需要名为 User_has_module 的模型。 我假设您有一个名为 User 的模型和一个名为 Module 的模型。
所以你应该设计成这样:
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);
});
希望我答对了您的问题并且对您有所帮助。 干杯