IHP - 将两个表中的数据合并和排序到单个视图中的最佳方法?

IHP - Best way to combine and sort data from two tables into a single view?

我有两个表:

Table: Posts
Columns: id, title, body, author_id, created_at

Table: Comments
Columns: id, post_id, body, author_id, created_at

我有以下操作:

action MyAction:
 posts <- query @Post |> fetch
 comments <- query @Comment |> fetch

我想将所有帖子和评论一起获取,在单个视图中按 created_at 组合和排序。在 IHP 中最好的方法是什么?

编辑:查看 Marc 的回答:collectionFetchRelated 是这里的正确函数

a有很多这样的关系,apost的评论可以用fetchRelated #comments查询。要为每个 post 执行此操作,我们可以按如下方式使用 mapM

postsWithComments <- query @Post 
           |> fetch
           >>= mapM (fetchRelated #comments)

要按 created_at 排序,请对 QueryBuilder 使用 orderByDesc 函数。我们可以直接将其应用于顶级查询,然后使用 modify.

修改内部 #comments 查询构建
postsWithComments <- query @Post 
           |> orderByDesc #createdAt
           |> fetch
           >>= mapM (fetchRelated #comments . modify #comments (orderByDesc #createdAt))

有关详细信息,请参阅 IHP "relationships" docs

您可以使用 collectionFetchRelated

posts <-
    query @Post
        |> fetch
        >>= pure . map (modify #comments (orderBy #createdAt))
        >>= collectionFetchRelated #comments

You can find this code in the IHP documentation here.