Is there a way when making a SequelizeJS query on an object, and including a relation which has a belongs-to-many association, to have the included property not return the association mapping object with the result?
i.e.:
Users.findAll({include: [{model: Role, as: 'roles'}]})
//yields objects of the following form
user: {
    username: 'test',
    roles: [
        {
           name: 'user',
           UserRoles: {userId: 1, roleId: 1} //<--I do not want this
        }
    ]        
}
To create a One-To-Many relationship, the hasMany and belongsTo associations are used together; To create a Many-To-Many relationship, two belongsToMany calls are used together.
How do you include two models in Sequelize? Your solution, along with using include: {all:true} in my findAll query, did the trick. instead of using include: {all:true} in findAll you can use include: {model: models. User, as: 'createdByUser'} , etc.
findAll({ include: [{ model: Post, where: { status: { [Op.ne]: 'draft' } }, required: false right: true // will create a right join }] }); Sequelize automatically sets the “required” option to “true”.
Found a solution to this in a github comment: https://github.com/sequelize/sequelize/issues/4074#issuecomment-153054311
gist:
Users.findAll({
    include: [
        {
            model: Role, 
            as: 'roles',
            through: {attributes: []} //<-- this line will prevent mapping object from being added
        }
    ]
});
You can try specifying the attributes property.
So to include fields say a,b,c you add
attributes: ['a', 'b','c']
To exclude them
attributes:{exclude:['a', 'b','c']}
So findAll looks like
Model.someModel.findAll({
  where: // some condition
  include: // some other model
  attributes: // some fields
})
You can also specify attributes within the include clause
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With