【发布时间】:2016-10-11 09:38:38
【问题描述】:
我正在使用 sequelize 在我的节点应用程序中对 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'});
}
}
});
现在,我想查找所有项目及其用户和角色。所以我使用了带有“include”参数的 findAll,如下所示:
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 结果?
谢谢
【问题讨论】:
标签: mysql node.js orm sequelize.js