如何使用Sequelize在include where条件内使用别名

时间:2019-05-23 21:28:45

标签: sql postgresql sequelize.js

一个表包含2个用户ID cols,userOneId和userTwoId。我的用户ID可以在任一列中。我想获取我的userId在任何一个col中的所有行,并且还包括其他用户的关联对象。

这是最新的尝试。我查询我的ID在userOneId或userTwoId中的位置,并为其他用户ID(别名)使用case / when的别名。然后在包含中使用别名otherUserId,以返回其他与用户相关的对象。

    where: {
      [Op.or]: [{
        userOneId: userId,
      }, {
        userTwoId: userId,
      }]
    },
    attributes: [
      'id',
      [sequelize.literal("CASE WHEN \"userOneId\" = " + userId + " THEN \"userTwoId\" ELSE \"userOneId\" END"), 'otherUserId']
    ],
    include: {
      where: {
        id: '$otherUserId$'
      },
      model: sequelize.models.User,
      as: 'otherUser',
      attributes: [ 'id', 'name', ...

模型关联为:

    MyModel.belongsTo(models.User, {
      as: 'userOne',
      foreignKey: 'userOneId'
    })

    MyModel.belongsTo(models.User, {
      as: 'userTwo',
      foreignKey: 'userTwoId'
    })

  User.hasMany(models.MyModel, {
    as: 'userOne',
    foreignKey: {
      name: 'userOneId',
      allowNull: false
    }
  })

  User.hasMany(models.MyModel, {
    as: 'userTwo',
    foreignKey: {
      name: 'userTwoId',
      allowNull: false
    }
  })

但是,它错误

  

用户多次与MyModel关联。要标识正确的关联,您必须使用“ as”关键字来指定要包含的关联的别名。

关于是否或如何使其正常工作的任何指针?

0 个答案:

没有答案