gorm一对多映射问题

我这边利用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
}

图片描述

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

阅读 8.1k
1 个回答

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

所以应该是

Post表的关键位置是

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

直接查询即可

db.Where("user_id = ?", userId).Preload("User").Find(&posts)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题