我正在使用 sequelize 在我的 Node 应用程序中对 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 结果?
谢谢
最佳答案
假设您的 User
模型链接到 Role
模型,这样的事情应该有效:
models.Projects.findAll({
include:[
{
model: models.User,
as:'users',
through: {attributes: []},
include: [models.Role]
}] }).then(function(result) {
// ... });
关于mysql - 使用关联和外键对 findAll 进行后续处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747904/