登录
首页 >  Golang >  Go问答

如何在 Gorm 中预加载而不查询数据

来源:stackoverflow

时间:2024-02-22 14:30:24 278浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《如何在 Gorm 中预加载而不查询数据》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

我有一个查询,从 jobs 表及其作者获取行(每个作业都有一个 author),但我想选择特定字段。

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
}

自定义预载未按预期运行。如果我没有指定具体字段,则查询有效并返回所有内容。 否则,如果我指定某些字段,它不会返回任何内容。


解决方案


这是因为您没有选择主键。将“id”添加到 select 子句中:

func(db *gorm.DB) *gorm.DB {
    return db.Select("ID", "Name", "Email")
}

否则 gorm 不知道如何将用户加入作业。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>