GoLang M从其他表中嵌入结构

4dc9hkyq  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(109)

我有三个模型,一个嵌入到另一个:

// same with db table "users" struct except UserEmail embedded
type User struct {
    ID      string `json:"id"`
    EmailID string `json:"-"`

    *UserEmail `json:",inline" gorm:"foreignKey:EmailID;references:UserEmailID"`
}

// not same with db table "email" struct
type UserEmail struct {
    UserEmailID string `json:"-"`
    UserEmail   string `json:"user_email"`
}

// same with db table "email" struct
type Email struct {
    ID    string `json:"id"`
    Email string `json:"email"`
}

字符串
我需要从2名为用户和电子邮件表预加载数据。
我的预加载代码看起来像这样,但会导致错误“ERROR:column users.email_id does not exist(SQLSTATE 42703)":

err = db.ORM.Model(&Users{}).
    Preload("UserEmail", func(db *gorm.DB) *gorm.DB {
        return db.Model(&Email{}).Select("id as user_email_id, email as user_email")
    }).
    Find(&resp).Error

mwngjboj

mwngjboj1#

你能提供模式数据库,也许这些信息会对你的问题很有用。
ERROR: column users.email_id does not exist (SQLSTATE 42703)表示users表中的email_id不存在
我想在你的schema DB中列名不是email_id而是user_email_id。也许你的表users schema是这样的:

| users           |
| --------------- |
| id              |
| user_email_id   |

字符串
模式表user_emails如下:

| user_emails     |
| --------------- |
| id              |
| email           |


如果我对数据库模式的猜测是正确的,那么修复可能是这样的:

type User struct {
    ID        string     `json:"id"`
    EmailID   string     `json:"-" gorm:"column:user_email_id"`
    UserEmail *UserEmail `json:",inline" gorm:"foreignKey:EmailID;references:UserEmailID"`
}

type UserEmail struct {
    UserEmailID string `json:"-" gorm:"column:id"`
    UserEmail   string `json:"user_email" gorm:"column:email"`
}


添加标签Column Name来保持你的name结构属性,你的预加载不需要查询sql别名来转换列id as user_email_id,因为已经使用了标签Column Name,最后的代码如下:

err = db.ORM.Model(&User{}).Preload("UserEmail").Find(&resp).Error

相关问题