【问题标题】:Sequelize.js: How to query N:M relationSequelize.js:如何查询 N:M 关系
【发布时间】:2017-08-28 09:42:35
【问题描述】:

我在sequelize中有如下关系:

Location.Offers = Location.belongsToMany(JobOffer, {
  foreignKey: 'locationId',
  through: 'JobOffer_Location',
  as: 'offers',
});

JobOffer.Locations = JobOffer.belongsToMany(Location, {
  foreignKey: 'jobOfferId',
  through: 'JobOffer_Location',
  as: 'locations',
});

但我无法根据位置查询工作机会:

const locations = [1, 2]
JobOffer.findAll({
  include: [{
    model: Location,
    as: 'locations',
    where: {
      locationId: {
        $in: locations
      }
    },
  }],
})

错误:只有 HasMany 关联支持 include.separate

我尝试了几乎所有可以在网上找到的解决方案,但似乎没有任何效果。想法?

【问题讨论】:

  • 您确定这是您在findAll 中使用的代码吗?你没有添加任何limit 或order 属性吗?
  • 我有,但我想简化问题。我还有其他参数,具体取决于我在客户端查询中发送的内容,但我只是想让这个 N:M 关系工作,到目前为止没有成功
  • 不要简化问题。 limit 是您的错误的原因 - belongsToMany 不支持它 - 关于这个问题有很多 SO 问题,以及与您遇到的问题相关的 github 票证。
  • 不知何故,我设法找到了适合我的情况的解决方案。

标签: javascript node.js sequelize.js


【解决方案1】:

不知怎的,我设法做到了:

order: [
  ["createdAt", "DESC"],
],
limit: limit,
offset: parsePage(args.page || 1, limit),
include: [{
  model: Location,
    as: 'locations',
    separate: false,
    attributes: [],
    duplicating: false,
  }],
where: {
  '$locations.id$': {
    $in: args.locations
  }
},

https://github.com/sequelize/sequelize/issues/4446

不知道发生了什么,如果有人知道我想了解它:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多