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

我有两个表:每个用户可以有多个工作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 author

FROM jobs AS j

INNER JOIN users AS u

ON 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"

}

如何获取每篇文章的作者数据?


烙印99
浏览 142回答 1
1回答

斯蒂芬大帝

查看您需要生成的 JSON 响应,您可以先将User字段添加到Job结构中,如下所示:type Job struct {&nbsp; &nbsp; ID&nbsp; &nbsp; &nbsp; uint&nbsp; &nbsp;`gorm:"primarykey" json:"id"`&nbsp; &nbsp; Title&nbsp; &nbsp;string `gorm:"type:varchar(255); not null" json:"title"`&nbsp; &nbsp; Content string `gorm:"not null" json:"content"`&nbsp; &nbsp; UserID&nbsp; uint&nbsp; &nbsp;`json:"-"`&nbsp; &nbsp; User&nbsp; &nbsp; User&nbsp; &nbsp;`json:"author"`}此外,只需在您的 repo 方法中进行一点小改动即可加载它。我添加了错误检查,因为您应该始终拥有它们。func (jobRepo repository) FindAll() ([]entity.Job, error) {&nbsp; &nbsp; var jobs []entity.Job&nbsp; &nbsp; tx := jobRepo.db.Preload("User").Find(&jobs)&nbsp; &nbsp; return jobs, tx.Error}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go