自定义 Gorm 预加载不获取数据
Custom Gorm preloading does not fetch data
我有一个从 jobs
table 及其作者(每个作业都有一个 author
)获取行的查询,但我想要 select 特定字段。
type User struct {
ID uint `gorm:"primarykey" json:"-"`
UUID uuid.UUID `gorm:"type:uuid not null" json:"-"`
Email string `gorm:"type:varchar(255); not null" json:"email"`
Name string `gorm:"type:varchar(255); not null" json:"name"`
AvatarURL string `gorm:"type:varchar(255); not null" json:"avatar_url"`
Provider string `gorm:"type:varchar(255); not null" json:"provider"`
ProviderID string `gorm:"type:varchar(255); not null" json:"-"`
Jobs []Job `json:"-"`
}
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
if dbc := jobRepo.db.Preload("User", func(db *gorm.DB) *gorm.DB {
return db.Select("Name", "Email")
}).Find(&jobs); dbc.Error != nil {
return nil, dbc.Error
}
return jobs, nil
}
自定义预加载未按预期运行。如果我没有指定具体字段,查询有效和returns一切。 否则,如果我指定一些字段,它returns什么都没有。
这是因为您没有select主键。在 select 子句中添加“ID”:
func(db *gorm.DB) *gorm.DB {
return db.Select("ID", "Name", "Email")
}
否则 GORM 不知道如何将用户加入作业。
我有一个从 jobs
table 及其作者(每个作业都有一个 author
)获取行的查询,但我想要 select 特定字段。
type User struct {
ID uint `gorm:"primarykey" json:"-"`
UUID uuid.UUID `gorm:"type:uuid not null" json:"-"`
Email string `gorm:"type:varchar(255); not null" json:"email"`
Name string `gorm:"type:varchar(255); not null" json:"name"`
AvatarURL string `gorm:"type:varchar(255); not null" json:"avatar_url"`
Provider string `gorm:"type:varchar(255); not null" json:"provider"`
ProviderID string `gorm:"type:varchar(255); not null" json:"-"`
Jobs []Job `json:"-"`
}
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
if dbc := jobRepo.db.Preload("User", func(db *gorm.DB) *gorm.DB {
return db.Select("Name", "Email")
}).Find(&jobs); dbc.Error != nil {
return nil, dbc.Error
}
return jobs, nil
}
自定义预加载未按预期运行。如果我没有指定具体字段,查询有效和returns一切。 否则,如果我指定一些字段,它returns什么都没有。
这是因为您没有select主键。在 select 子句中添加“ID”:
func(db *gorm.DB) *gorm.DB {
return db.Select("ID", "Name", "Email")
}
否则 GORM 不知道如何将用户加入作业。