我正在使用sequelize在我的node-application中建模mySql数据库模式。假设我有3个表:项目,用户和角色。
项目与用户之间通过“Project_User”进行“多对多”关联,其中定义了用户对项目的角色。
项目模型:
var Project = sequelize.define('Project', {
name:{type: DataTypes.STRING, unique: true}
},
classMethods: {
associate: function(models) {
Project.belongsToMany(models.User, { through: 'Project_User', as: 'users'});
}
}
// Methods...
);
用户模型:
var User= sequelize.define('User', {
name:{type: DataTypes.STRING, unique: true}
},
classMethods: {
associate: function(models) {
User.belongsToMany(models.Project, { through: 'Project_User', as: 'projects'});
}
}
// Methods...
);
这是关联表 Project_User Model :
var Project_User = sequelize.define('Project_User', {
role:
{
type: DataTypes.INTEGER,
allowNull: false,
references: 'Role',
referencesKey: 'id'
}
},{
classMethods: {
associate: function(models) {
Project_User.belongsTo(models.Role, {foreignKey: 'role'});
}
}
});
现在,我想找到所有项目,包括他们的用户和他们的角色。所以我使用了findAll和“include”参数,如下所示:
models.Projects.findAll({
include:[
{
model: models.User,
as:'users',
through: {attributes: ['role'], as: 'role'}
}]
}).then(function(result) {
// ...
});
这很好但我只有与用户关联的roleId。我无法将此“roleId”链接到角色表以获取角色名称等其他属性...
这是我得到的JSON:
[
{
"id": 1,
"name": "Project name",
"users": [
{
"id": 1,
"name": "User name",
"role": {
"role": 1
}
}
]
}
]
但我希望有类似的东西:
[
{
"id": 1,
"name": "Project name",
"users": [
{
"id": 1,
"name": "User name",
"role": {
"id": 1,
"name": "Role name",
"description": "Some info...",
}
}
]
}
]
我已经尝试了许多事情来实现这种关联,即使是连续的包括但它没有成功。 findAll选项需要什么才能获得此JSON结果?
由于
答案 0 :(得分:0)
假设您的User
模型与Role
模型相关联,则此类内容应该有效:
models.Projects.findAll({
include:[
{
model: models.User,
as:'users',
through: {attributes: []},
include: [models.Role]
}] }).then(function(result) {
// ... });