![](/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.