从sequelize.js 中的关联模型加载属性

Ksh*_*esh 6 sql orm node.js sequelize.js

我有两个型号。用户和管理者

用户模型

 const UserMaster = sequelize.define('User', {
        UserId: {
            type: DataTypes.BIGINT,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        RelationshipId: {
            type: DataTypes.STRING,
            allowNull: true,
            foreignKey: true
        },
        UserName: {
            type: DataTypes.STRING,
            allowNull: true
        }
    })
Run Code Online (Sandbox Code Playgroud)

经理模型

 const Manager = sequelize.define('Manager', {
        ManagerId: {
            type: DataTypes.BIGINT,
            allowNull: false,
            primaryKey: true,
            autoIncrement: true
        },
        RelationshipId: {
            type: DataTypes.STRING,
            allowNull: true,
            foreignKey: true
        },
        MangerName: {
            type: DataTypes.STRING,
            allowNull: true
        }
    })
Run Code Online (Sandbox Code Playgroud)

模型被缩小以简化问题

协会..

User.belongsTo(models.Manager, {
    foreignKey: 'RelationshipId',
    as: 'RM'
});

Manger.hasMany(model.User, {
    foreignKey: 'RelationshipId',
    as: "Users"
})
Run Code Online (Sandbox Code Playgroud)

所以,在 user.findAll() 上

var userObject = models.User.findAll({
    include: [{
        model: models.Manager,
        required: false,
        as: 'RM',
        attributes: ['ManagerName']
    }]
});
Run Code Online (Sandbox Code Playgroud)

我得到以下信息。

userObject = [{
        UserId: 1,
        RelationshipId: 4545,
        UserName: 'Jon',
        RM: {
            ManagerName: 'Sam'
        }
    },
    {
        UserId: 2,
        RelationshipId: 432,
        UserName: 'Jack',
        RM: {
            ManagerName: 'Phil'
        }
    },
    ...
]
Run Code Online (Sandbox Code Playgroud)

如何将“ManagerName”属性从 Manager 模型(与 RM 关联)移动到 UserObject?是否可以以某种方式从急切加载的模型中加载属性,而不将它们嵌套在单独的对象下?我期望生成的对象看起来像该对象

预期对象——

userObject = [{
        UserId: 1,
        RelationshipId: 4545,
        UserName: 'Jon',
        ManagerName: 'Sam' // <-- from Manager model
    },
    {
        UserId: 2,
        RelationshipId: 432,
        UserName: 'Jack',
        ManagerName: 'Phil' // <-- from Manager model
    },
    ...
]
Run Code Online (Sandbox Code Playgroud)

谢谢。

Ksh*_*esh 10

添加raw: true选项attributes可以得到所需的对象格式。

所以,

var userObject = models.User.findAll({
raw:true,
attributes: {
include: [Sequelize.col('RM.ManagerName'), 'ManagerName']
},
    include: [{
        model: models.Manager,
        required: false,
        as: 'RM',
        attributes: []
    }]
});
Run Code Online (Sandbox Code Playgroud)