2014-11-21 80 views
1

Sequelize预先加载 - 返回考虑下面的(工作)代码Sequelize 1.7.9平坦的数据对象

database.User.find({ 
    where: { signupKey: signupKey }, 
    include: [{ model: database.Company, as: "Company" }] 
}).then(function(user) { 

user对象吐出了这样的事情:

{ dataValues: 
{ id: 1, 
    email: 'email', 
    password: '', 
    firstname: null, 
    lastname: null, 
    companyRole: 'admin', 
    nonprofitRole: null, 
    signupKey: '24Pm9MZ22', 
    status: 'pending', 
    createdAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
    updatedAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
    CompanyId: 1, 
    NonprofitId: null, 
    company: 
    { dataValues: [Object], 
     _previousDataValues: [Object], 
     __options: [Object], 
     options: [Object], 
     hasPrimaryKeys: true, 
     selectedValues: [Object], 
     __eagerlyLoadedAssociations: [], 
     isNewRecord: false } }, 
_previousDataValues: 
{ id: 1, 
    email: 'email', 
    password: '', 
    firstname: null, 
    lastname: null, 
    companyRole: 'admin', 
    nonprofitRole: null, 
    signupKey: '24Pm9MZ22', 
    status: 'pending', 
    createdAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
    updatedAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
    CompanyId: 1, 
    NonprofitId: null, 
    company: 
    { dataValues: [Object], 
     _previousDataValues: [Object], 
     __options: [Object], 
     options: [Object], 
     hasPrimaryKeys: true, 
     selectedValues: [Object], 
     __eagerlyLoadedAssociations: [], 
     isNewRecord: false } }, 
__options: 
{ timestamps: true, 
    createdAt: 'createdAt', 
    updatedAt: 'updatedAt', 
    deletedAt: 'deletedAt', 
    instanceMethods: {}, 
    classMethods: { associate: [Function] }, 
    validate: {}, 
    freezeTableName: false, 
    freezeAssociations: false, 
    underscored: false, 
    syncOnAssociation: true, 
    paranoid: false, 
    whereCollection: { signupKey: '24Pm9MZ22' }, 
    schema: null, 
    schemaDelimiter: '', 
    language: 'en', 
    defaultScope: null, 
    scopes: null, 
    hooks: { beforeCreate: [], afterCreate: [] }, 
    omitNull: false, 
    uniqueKeys: {}, 
    hasPrimaryKeys: true }, 
options: 
{ isNewRecord: false, 
    isDirty: false, 
    include: [ [Object] ], 
    includeNames: [ 'Company', 'company' ], 
    includeMap: { Company: [Object] }, 
    includeValidated: true, 
    raw: true }, 
hasPrimaryKeys: true, 
selectedValues: 
{ id: 1, 
    email: 'email', 
    password: '', 
    firstname: null, 
    lastname: null, 
    companyRole: 'admin', 
    nonprofitRole: null, 
    signupKey: '24Pm9MZ22', 
    status: 'pending', 
    createdAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
    updatedAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
    CompanyId: 1, 
    NonprofitId: null }, 
__eagerlyLoadedAssociations: [], 
isNewRecord: false, 
company: 
{ dataValues: 
    { id: 1, 
     slug: 'company', 
     logo: null, 
     name: 'company', 
     createdAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
     updatedAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST) }, 
    _previousDataValues: 
    { id: 1, 
     slug: 'company', 
     logo: null, 
     name: 'company', 
     createdAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
     updatedAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST) }, 
    __options: 
    { timestamps: true, 
     createdAt: 'createdAt', 
     updatedAt: 'updatedAt', 
     deletedAt: 'deletedAt', 
     instanceMethods: {}, 
     classMethods: [Object], 
     validate: {}, 
     freezeTableName: false, 
     freezeAssociations: false, 
     underscored: false, 
     syncOnAssociation: true, 
     paranoid: false, 
     whereCollection: null, 
     schema: null, 
     schemaDelimiter: '', 
     language: 'en', 
     defaultScope: null, 
     scopes: null, 
     hooks: [Object], 
     omitNull: false, 
     uniqueKeys: {}, 
     hasPrimaryKeys: true }, 
    options: 
    { isNewRecord: false, 
     isDirty: false, 
     include: undefined, 
     includeNames: undefined, 
     includeMap: undefined, 
     includeValidated: true, 
     raw: true }, 
    hasPrimaryKeys: true, 
    selectedValues: 
    { id: 1, 
     slug: 'company', 
     logo: null, 
     name: 'company', 
     createdAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST), 
     updatedAt: Fri Nov 21 2014 15:14:29 GMT-0500 (EST) }, 
    __eagerlyLoadedAssociations: [], 
    isNewRecord: false } } 

在正常sequelize没有急切的加载,我可以登录user.values,并得到一个更正常的JS对象,除了与渴望加载我得到这个时,我登录user.values

{ id: 1, 
email: 'email', 
password: 'password', 
firstname: null, 
lastname: null, 
companyRole: 'admin', 
nonprofitRole: null, 
signupKey: 'bN2dGdNbD', 
status: 'pending', 
createdAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST), 
updatedAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST), 
CompanyId: 1, 
NonprofitId: null, 
company: 
{ dataValues: 
    { id: 1, 
     slug: 'company', 
     logo: null, 
     name: 'company', 
     createdAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST), 
     updatedAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST) }, 
    _previousDataValues: 
    { id: 1, 
     slug: 'company', 
     logo: null, 
     name: 'company', 
     createdAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST), 
     updatedAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST) }, 
    __options: 
    { timestamps: true, 
     createdAt: 'createdAt', 
     updatedAt: 'updatedAt', 
     deletedAt: 'deletedAt', 
     instanceMethods: {}, 
     classMethods: [Object], 
     validate: {}, 
     freezeTableName: false, 
     freezeAssociations: false, 
     underscored: false, 
     syncOnAssociation: true, 
     paranoid: false, 
     whereCollection: null, 
     schema: null, 
     schemaDelimiter: '', 
     language: 'en', 
     defaultScope: null, 
     scopes: null, 
     hooks: [Object], 
     omitNull: false, 
     uniqueKeys: {}, 
     hasPrimaryKeys: true }, 
    options: 
    { isNewRecord: false, 
     isDirty: false, 
     include: undefined, 
     includeNames: undefined, 
     includeMap: undefined, 
     includeValidated: true, 
     raw: true }, 
    hasPrimaryKeys: true, 
    selectedValues: 
    { id: 1, 
     slug: 'company', 
     logo: null, 
     name: 'company', 
     createdAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST), 
     updatedAt: Fri Nov 21 2014 15:19:14 GMT-0500 (EST) }, 
    __eagerlyLoadedAssociations: [], 
    isNewRecord: false } } 

我希望能够运行user.values并得到一个平面user对象,就像返回,并有user.company也是一个扁平的对象,作为user的孩子。 sequalize是否提供了一种可以运行的方法,即使是在进行加载的情况下也是如此,这样您就可以像我所描述的那样组织一个扁平的对象了吗?

+1

在2.0'toJSON'默认返回一个普通的对象,但恐怕也没办法得到那在1.7 – 2014-11-23 22:42:06

+0

@JanAagaardMeier辉煌!我知道很多好东西即将到来,很高兴听到JSON就是其中之一 – 2014-11-24 17:09:57

回答

0

在V3.9你可以使用“得到”的方法来ORM对象转换为普通对象:

user.get({plain: true})