仅从 sequelize junction 模型返回指定的关联模型
Posted
技术标签:
【中文标题】仅从 sequelize junction 模型返回指定的关联模型【英文标题】:Only return specified associated model from sequelize junction model 【发布时间】: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',
)
【问题讨论】:
【参考方案1】:我尝试使用 Sequelize 中的 auto 方法,但它们似乎不起作用。
你可以这样做:
models.User.findAll(
include: [
model: models.UserPool,
where: poolId: pool.id ,
required: true
]
【讨论】:
【参考方案2】:poolUsers
是一个 UserPool 对象数组,因此它没有 getUsers
方法。您可以映射每个 UserPool 并获取用户,但这会导致不必要地大量调用您的数据库。
您已在 Pool
和 User
之间创建关联。所以你可以这样做
members: async (pool) =>
return pool.getUsers()
【讨论】:
其实我才意识到这一点。我在我的models/pool.js
文件中定义了一个无关的关联:facepalm:但是是的,这是正确的。谢谢!以上是关于仅从 sequelize junction 模型返回指定的关联模型的主要内容,如果未能解决你的问题,请参考以下文章