如何将 MySQL 查询转换为 GORM 查询
How to convert MySQL query into GORM query
我有两个表: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:"-"`
}
我想得到每个 post 的作者。
以下查询有效:
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
}
我必须return以下JSON回复:
job_id: <random_id>
job_title: "Test Title Content",
job_content: "Test Job Content",
author: {
name: "Test User Name"
}
如何获取每个 post 的作者数据?
查看您需要生成的 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"`
}
此外,您的回购方法只需稍作改动即可加载它。我添加了错误检查,因为您应该始终使用它们。
func (jobRepo repository) FindAll() ([]entity.Job, error) {
var jobs []entity.Job
tx := jobRepo.db.Preload("User").Find(&jobs)
return jobs, tx.Error
}
我有两个表: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:"-"`
}
我想得到每个 post 的作者。
以下查询有效:
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
}
我必须return以下JSON回复:
job_id: <random_id>
job_title: "Test Title Content",
job_content: "Test Job Content",
author: {
name: "Test User Name"
}
如何获取每个 post 的作者数据?
查看您需要生成的 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"`
}
此外,您的回购方法只需稍作改动即可加载它。我添加了错误检查,因为您应该始终使用它们。
func (jobRepo repository) FindAll() ([]entity.Job, error) {
var jobs []entity.Job
tx := jobRepo.db.Preload("User").Find(&jobs)
return jobs, tx.Error
}