【发布时间】:2020-07-03 06:21:20
【问题描述】:
我正在尝试正确使用 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 也是如此
架构:
type User {
id: ID!
username: String!
email: String!
role: String
}
模型关联
User.associate = models => {
User.belongsToMany(models.Pool, {
onDelete: 'CASCADE',
through: models.UserPool,
foreignKey: 'userId',
})
}
所以这两个模型通过一个名为
UserPool 只存储User 和Pool 的pks。
在我的./resolvers/pool.js 中,我正在为Pool 定义我的gql 模型解析器。
这就是我的问题所在。
在下面的members 字段中,我只想返回User 的数组
对象,我可以通过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',
})
}
【问题讨论】:
标签: node.js postgresql graphql sequelize.js apollo