繁体   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