Node.js 仅从sequelize连接模型返回指定的关联模型

Node.js 仅从sequelize连接模型返回指定的关联模型,node.js,postgresql,graphql,sequelize.js,apollo,Node.js,Postgresql,Graphql,Sequelize.js,Apollo,我正试图正确地使用sequelize查询来处理graphql+apollo 这是我的Poolgql模式: type Pool { id: ID! name: String! createdBy: User members: [User] } 下面是池模型关联 Pool.associate = models => { Pool.belongsToMany(models.User, { onDelete: 'CASCADE',

我正试图正确地使用sequelize查询来处理graphql+apollo

这是我的
Pool
gql模式:

  type Pool {
    id: ID!
    name: String!
    createdBy: User
    members: [User]
  }
下面是池模型关联

  Pool.associate = models => {
    Pool.belongsToMany(models.User, {
      onDelete: 'CASCADE',
      through: models.UserPool,
      foreignKey: models.UserPool.poolId,
    })
  }
对于
用户
模式:

模型协会

  User.associate = models => {
    User.belongsToMany(models.Pool, {
      onDelete: 'CASCADE',
      through: models.UserPool,
      foreignKey: 'userId',
    })
  }
这两个模型通过一个称为
UserPool
仅存储
User
Pool
的PK

在我的
/resolvers/pool.js
中,我正在为
池定义gql模型解析器。
这就是我的问题所在。
在下面的
成员
字段中,我只想返回
用户
对象,我可以通过
UserPool

  Pool: {
    createdBy: async (pool, _, { models }) => {
      // this sequelize built-in works and returns the createdBy User model
      const user = await pool.getUser()
      return user
    },
    members: async (pool, _, { models }) => {
      let users = []

      const poolUsers = await models.UserPool.findAll({
        where: { poolId: pool.id },
      })


      // *** below is what I want to do -- use the in-built ***
      // *** sequelize query methods you get with the n:m assoc ***

      const users = await poolUsers.getUsers()

      // However, each time this throws an error: 
      // getUsers() is not a function....

      return users
    },
  },
下面是我的UserPool模型关联定义:

  UserPool.associate = models => {
    UserPool.belongsTo(models.User, {
      onDelete: 'CASCADE',
      foreignKey: 'userId',
    })
    UserPool.belongsTo(models.Pool, {
      onDelete: 'CASCADE',
      foreignKey: 'poolId',
    })
  }

我试图在Sequelize中使用自动方法,但它们似乎不起作用

您只需执行以下操作:

models.User.findAll({
        include: [{
            model: models.UserPool,
            where: { poolId: pool.id },
            required: true
        }]

poolUsers
是一个UserPool对象数组,因此它没有
getUsers
方法。您可以映射每个用户池并获取用户,但这将导致对数据库的不必要的大量调用

您已经在
用户
之间创建了关联。所以你可以直接做

members: async (pool) => {
  return pool.getUsers()      
}

事实上我才意识到这一点。我在我的
models/pool.js
文件中定义了一个无关的关联:facepalm:但是是的,这是正确的。谢谢
members: async (pool) => {
  return pool.getUsers()      
}