gorm一对多映射问题

发布于 2022-09-11 16:15:34 字数 1183 浏览 13 评论 0

我这边利用golang的gorm构造了数据模型,一个posts,一个users,一个用户对应多个文章
posts.go

type Posts struct {
    gorm.Model

    //Key string `gorm:"unique:not null"`

    //一对多关系映射 关联外键
    User Users
    Userid int

    Title string `gorm:"type:varchar(200)"`
    Summart string `gorm:"varchar(800)"`
    Content string `gorm:"type:text"`
    VisitCount int `gorm:"default:0"`
    Like int   `gorm:"default:0"`
}

users.go

type Users struct {
    gorm.Model

    Username string `gorm:"unique_index"`

    // 一对多关系映射,一个用户有多篇文章
    PostsArticle []Posts `gorm:"FOREIGNKEY:Userid;ASSOCIATION_FOREIGNKEY:ID"`

    Password string
    Avatar string
    IsLogin bool    `gorm:"default:false"`
    //添加默认值 0代表管理员,1代表普通用户
    Role int        `gorm:"default(1)"`

}

然后想通过用户id查到相关联的文章


func GetPostsByUserID(id int) (*[]Posts, error) {
    var posts []Posts
    if err := db.Debug().Preload("User").Find(&posts).Error; err != nil {
        return nil, err
    }

    return &posts, nil
}

图片描述

最后出现这个问题,怎么解决

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

愁杀 2022-09-18 16:15:34

你这个关系其实是 多个Posts所属一个User。

所以应该是

Post表的关键位置是

type Post struct {
    // 省略
    UserID int `gorm:"index" //注意加索引,默认起名字规范的话,不需要主动指定关系
    User    User    
}

直接查询即可

db.Where("user_id = ?", userId).Preload("User").Find(&posts)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文