Node.js – sequelize fetching associations on find (1.6)

node.jssequelize.js

sequelize 1.6 has the following in the changelog:

[FEATURE] added association prefetching for find and findAll

The question is HOW?

I have the following models defined:

var self = {
    Medium: client.define("Medium", {
        name: Sequelize.STRING,
        description: Sequelize.TEXT
    },

    User: client.define("User", {
        firstName: Sequelize.STRING,
        lastName: Sequelize.STRING,
        email: Sequelize.STRING,
        aboutArt: Sequelize.TEXT,
        bio: Sequelize.TEXT,
        password: Sequelize.STRING,
        description: Sequelize.TEXT
    }
};
self.User.hasMany(self.Medium, { as: 'Media' });
self.Medium.hasMany(self.User);

for(var key in self){
    var model = self[key];
    model.sync();
}

later when i fetch a user like this:

 User.find(id)
    .success(function(record) {
        //record has no media!
    })

the User instance does not have a list media. How do i auto fetch associations?

Best Answer

BTW: Now that Sequelize 1.6.0 is out, the syntax for the eager loading has slightly changed:

User.find({ where: {id: id}, include: [Media] }).success(function(user){ 
  console.log(user.media)
})

So you'll have to pass the Model instead of the Model's name to the include statement.

Related Topic