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