Sequelize include return 数据格式

Sequelize include return data format

我有一个模型 User 和 table userRole 因为模型 UserRole 有一个来自 User 的外键 userId table.

我已使用此查询获取一个用户的 useRole 详细信息:

const userFound = await User.findAll({
        where: { userId },
        attributes: { exclude: ["password"] },
        include: {
            model: UserRole,
            as: "userRole",
            require: true,
        },
    })

return值为:

[
    {
        "userId": 36,
        "firstName": "a",
        "lastName": "b",
        "userRole": {
            "userId": 36,
            "userRoleId": 3
        }
    },
    {
        "userId": 36,
        "firstName": "a",
        "lastName": "b",
        "userRole": {
            "userId": 36,
            "userRoleId": 5
        }
    }
]

如何使 userRole return 成为一个嵌套数组,例如:

[
    {
        "userId": 36,
        "firstName": "a",
        "lastName": "b",
        "userRole": [
            {
                "userId": 36,
                "userRoleId": 3
            },
            {
                "userId": 36,
                "userRoleId": 5
            },
        ]
    }
]

更新: 我设置的关系是:

User.belongsTo(UserRole, { targetKey: "userId", foreignKey: "userId", as: "userRoles" })
UserRole.hasMany(User, { sourceKey: "userId", foreignKey: "userId", as: "users" })

查询前需要添加User和UserRole的关联

UserRole.belongsTo(User, { as: 'user', foreignKey: 'userId', targetKey: 'userId' }); User.hasMany(UserRole, { as: 'userRole', foreignKey: 'userId', sourceKey: 'userId' });

https://sequelize.org/master/manual/assocs.html#one-to-many-relationships

我想你有这样的联想:

User.hasOne(UserRole, { foreignKey: 'userId', as: 'userRole' }); 

您应该将其替换为(因为一个用户有多个角色):

User.hasMany(UserRole, { foreignKey: 'userId', as: 'userRole' });