Я пытаюсь правильно использовать запросы на продолжение для работы с 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
}
модель ассо c
User.associate = models => {
User.belongsToMany(models.Pool, {
onDelete: 'CASCADE',
through: models.UserPool,
foreignKey: 'userId',
})
}
Таким образом, эти две модели имеют: m связь через модель соединения, называемую UserPool
, которая просто хранит pks для User
и Pool
.
В моем ./resolvers/pool.js
я определяю свой преобразователь модели gql для Pool
. Вот где моя проблема. В приведенном ниже поле 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 def:
UserPool.associate = models => {
UserPool.belongsTo(models.User, {
onDelete: 'CASCADE',
foreignKey: 'userId',
})
UserPool.belongsTo(models.Pool, {
onDelete: 'CASCADE',
foreignKey: 'poolId',
})
}