我正在尝试实施某种基本的社交网络项目。它有Posts
,Comments
和Likes
其他任何东西一样。
- 一个帖子可以有很多评论
- 一个帖子可以有很多赞
- 一篇文章可以有一个作者
我/posts
在客户端应用程序上有一条路线。Posts
它通过分页列出并显示它们的title
、image
、authorName
和。commentCount
likesCount
graphql
查询是这样的;
query {
posts(first: 10, after: "123456") {
totalCount
edges {
node {
id
title
imageUrl
author {
id
username
}
comments {
totalCount
}
likes {
totalCount
}
}
}
}
}
我正在使用apollo-server
,TypeORM
和. 我用来获取每个帖子。我只是用 批处理请求,从查询中获取,将查询结果映射到每个. 你知道,最基本的用法类型。PostgreSQL
dataloader
dataloader
author
authorIds
dataloader
authors
PostgreSQL
where user.id in authorIds
authorId
dataloader
但是当我尝试在 each 下查询comments
orlikes
连接时post
,我被卡住了。postId
如果没有分页,我可以使用相同的技术并为它们使用。但是现在我必须包含分页的过滤器参数。对于某些where
条件,可能还有其他过滤器参数。
我找到了数据加载器的cacheKeyFn
选项。我只是为传递给数据加载器的过滤器对象创建一个字符串键,它不会复制它们。它只是将唯一的传递给batchFn
. 但是我不能创建一个 sql 查询TypeORM
来分别获取每个first
, after
,orderBy
参数的结果并将结果映射回调用数据加载器的函数。
我搜索了spectrum.chat
源代码,我认为它们不允许用户查询嵌套连接。还尝试了 Github GraphQL Explorer,它可以让您查询嵌套连接。
有没有推荐的方法来实现这一目标?我了解如何使用 传递object
todataloader
和批处理它们cacheKeyFn
,但我不知道如何从PostgreSQL
一个查询中获取结果并将结果映射到从加载程序返回。
谢谢!