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
}

图片描述

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

2018-12-15 提问
1 个回答
0

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

所以应该是

Post表的关键位置是

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

直接查询即可

db.Where("user_id = ?", userId).Preload("User").Find(&posts)

撰写答案

推广链接