簡體   English   中英

BelongsToMany 急切加載為每個關聯返回多個對象

[英]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設置為 true,您明確要求使用這種結果格式。 我也沒有在這里看到使用nest

我建議你刪除這兩個參數。

有關詳細信息,請參閱Sequelize API 參考

正如我在評論中所說,我需要使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM