![](/img/trans.png)
[英]Automatic Eager Loading in Sequelize when I am using belongsToMany assocation
[英]BelongsToMany eager loading returns multiple objects for each association
我有两个模型:用户和经济活动。 它们通过 UserEconomicActivity 关联(这是一个 BelongsToMany 关系)。 在用户 model 中,我定义了这样的关联:
this.belongsToMany(models.EconomicActivity, {
through: 'UserEconomicActivity',
as: 'economicActivities',
otherKey: {
name: 'economicActivityId',
allowNull: false
},
foreignKey: {
name: 'userId',
allowNull: false
}
})
我正在尝试查询与一项或多项经济活动相关联的用户,如下所示:
const users = await User.findAll({
include: [
{
model: EconomicActivity,
as: 'economicActivities',
where: {
id: filters.economicActivities // This is an array with IDs I want to filter
}
}
],
raw: true,
nest: true
})
假设一个特定用户与 2 个经济活动相关联。 当我运行这个查询时,它会返回同一个用户两次,每个关联一个。 我想返回同一个用户一次,其中包含一系列相关的经济活动(如 user.economicActivities)。 这可能吗?
正如我在评论中所说,我需要使用 raw 和 nest 因为我将数据传递给 Handlebars,而 Handlebars 只能 output 普通 JavaScript 对象,否则它会给我错误Handlebars: Access has been denied to resolve the property "name" because it is not an "own property" of its parent
并且不会 output 数据。
但是,我找到了一种方法来获得一个普通的 JavaScript object 并将所有关联保存在一个数组中:
await this.model.findAll(query).map(item => item.get({ plain: true }))
该模型的get
方法正是我想要的。 因为我使用的是findAll
,所以我使用 ES6 map 方法从查询返回的每个 model 中调用get
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.