2014-11-21 77 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})