Sequelize包含多个where条件

Sequelize include with multiple where condition

我在将 Sequelize 与 include 一起使用时遇到了一些问题。问题是我的模型在 child table.

中使用了两个主键

所以它是这样的 Parent table 用户:ID,...
Post : Id, UserId(外键, 绑定到用户id), ... Post 哈希标签:HashTag,PostId(外键,绑定到 Post id),UserId(外键,绑定到 Post table 的用户 id )

所以 table 层次结构看起来像这样 用户 - post - post 哈希标签

现在当我尝试这样做时,

Post.findAll(
  include: {
    model: post hash tag
  }
)

然后它只搜索 post 哈希标签,其中 post 哈希标签的 post id table 等于 post id posttable

所以我这样添加

Post.findAll(
  include: {
    model: post hash tag
    where: {
      col1: models.sequelize.where(models.sequelize.col('POST.USER_ID'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID'))
    }
  }
);

然后会在'where'子句出现问题,找不到Post.USER_ID。

如果我将 col1 值更改为 Post.userId 那么现在它解决了上述错误,但在 'on' 子句

处给出了另一个错误

你知道我该如何解决这个问题吗?

这里给出了完整的模型

用户

sequelize.define('User', {
    id: { type: DataTypes.STRING(6), field: 'ID', primaryKey : true }
)

Post - 我知道多主声明不能正常工作,所以不用考虑太多

sequelize.define('Post', {
    id: { type: DataTypes.STRING(6), field: 'ID', primaryKey: true },
    userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true }
)

Post 哈希标签

sequelize.define('PostHashTag', {
    postId: { type: DataTypes.STRING(6), field: 'POST_ID', primaryKey: true },
    hashTag: { type: DataTypes.STRING(20), field: 'HASH_TAG', primaryKey: true },
    userId: { type: DataTypes.STRING(6), field: 'USER_ID', primaryKey: true }
  }
)

我使用的查询是

Post.findAll({
  attributes: ['id', 'userId'],
  where: {
    userId: userId,
    id: { $lt: postId }
  },
  include: [{
    model: models.PostHashTag,
    attributes: ['hashTag'],
    where: {
      col1: models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId'))
  }]).then(...)

我自己找到了答案... col1:

models.sequelize.where(models.sequelize.col('Post.USER_ID'), '=', models.sequelize.col('PostHashTag.userId')) 

这应该是

userId: models.sequelize.where(models.sequelize.col('POST.userId'), '=', models.sequelize.col('POST_HASH_TAG.USER_ID'))

这会奏效。 table 和括号中使用的列的物理名称