为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 MySQL 查询转换为 GORM 查询

如何将 MySQL 查询转换为 GORM 查询

Go
烙印99 2022-07-18 16:24:30
我有两个表:每个用户可以有多个工作users,jobs但一个特定的工作属于一个用户。type Job struct {    ID      uint   `gorm:"primarykey" json:"id"`    Title   string `gorm:"type:varchar(255); not null" json:"title"`    Content string `gorm:"not null" json:"content"`    UserID  uint   `json:"-"`}type User struct {    ID         uint      `gorm:"primarykey" json:"-"`    UUID       uuid.UUID `gorm:"type:char(36) not null" json:"-"`    Name       string    `gorm:"type:varchar(255); not null" json:"name"`    Jobs       []Job     `json:"-"`}我想和它的作者一起发布每一篇文章。以下查询有效:SELECT j.id, j.title, j.content, u.name AS authorFROM jobs AS jINNER JOIN users AS uON j.user_id = u.id在戈姆:func (jobRepo repository) FindAll() []entity.Job {    var jobs []entity.Job    jobRepo.db.Find(&jobs)    // how do we handle the rest?    return jobs}我必须返回以下 JSON 响应:job_id: <random_id>job_title: "Test Title Content",job_content: "Test Job Content",author: {  name: "Test User Name"}如何获取每篇文章的作者数据?
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

查看您需要生成的 JSON 响应,您可以先将User字段添加到Job结构中,如下所示:


type Job struct {

    ID      uint   `gorm:"primarykey" json:"id"`

    Title   string `gorm:"type:varchar(255); not null" json:"title"`

    Content string `gorm:"not null" json:"content"`

    UserID  uint   `json:"-"`

    User    User   `json:"author"`

}

此外,只需在您的 repo 方法中进行一点小改动即可加载它。我添加了错误检查,因为您应该始终拥有它们。


func (jobRepo repository) FindAll() ([]entity.Job, error) {

    var jobs []entity.Job

    tx := jobRepo.db.Preload("User").Find(&jobs)


    return jobs, tx.Error

}


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信