gpt4 book ai didi

GORM 在相关表中按条件预加载

转载 作者:行者123 更新时间:2023-12-01 22:29:01 26 4
gpt4 key购买 nike

我不知道如何正确编写一个查询,该查询将只选择那些对关系表应用条件的条目。我的多对多模式看起来像这样 Topics - TopicPosts - Posts。我想查询所有 TopicPosts,其中 Post 不是私有(private)的或属于当前用户。我是这样做的:

topicPosts := []model.TopicPost{}
h.DB.
Where("topic_id = ?", id).
Preload("Post", func(db *gorm.DB) *gorm.DB {
return db.Not("is_private = ? AND user_id != ?", "true", currentUser.ID)
}).
Preload("Post.Tags").
Find(&topicPosts)

正如预期的那样,它返回所有 TopicPosts 但不会急切地加载具有给定条件的 Posts。然后我手动过滤掉它们:

publicTopicPosts := []model.TopicPost{}
for _, p := range topicPosts {
if p.Post.ID != 0 {
publicTopicPosts = append(publicTopicPosts, p)
}
}

我意识到这是一个不合格的解决方案,我不太擅长 SQL,但我认为应该可以在单个查询中实现。我将不胜感激任何帮助。如果重要的话,我会使用 Postgres。

最佳答案

你可以用这个方法

db.Preload("Post", "is_private = ? AND user_id != ?", "true", currentUser.ID).Find(&topicPosts)

关于GORM 在相关表中按条件预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54267875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com