戈尔姆 |如何使用扫描和预加载

标签 go go-gorm

我是 Go 和 GORM 的新手。当我想连接两个表并选择两个表中的所有字段时,我遇到了 gorm 问题。

我的模型:

行动:

type Action struct {
    ID        uint64
    Type      int
    Url       string
}
type Reminder struct {
    ID            uint64 `gorm:"primary_key"`
    MerchantID    uint64
    MerReminderID string
    Title         string
    Description   string
    ActionID      uint64
    Action        *Action `gorm:"save_associations:false"`
    Payload       string
    StartAt       time.Time `gorm:"-"`
    EndAt         time.Time `gorm:"-"`
}
type UserReminder struct {
    UserID     uint64
    ReminderID uint64
    Reminder   Reminder
    StartAt    time.Time
    EndAt      time.Time
    Expired    bool
}

我的要求:我想获得一次UserID的所有Reminder

  • 解决方案 1:
var reminders []*models.Reminder
err := db.Set("gorm:auto_preload", true).
    Raw("SELECT * FROM user_reminders AS ur, reminders AS r WHERE ur.reminder_id = r.id AND ur.user_id = ?", userID).
    Preload("Actions").
    Scan(&reminders)

=> 问题:连接两个表时选择所有列,但对象 Action 无法预加载。

  • 解决方案 2:
var reminders []*models.Reminder
err := db.Set("gorm:auto_preload", true).
        Joins("JOIN user_reminders ON user_reminders.reminder_id = reminders.id").
    Where("user_reminders.user_id = ? AND user_reminders.end_at >= ? AND user_reminders.deleted_at IS NULL", userID, time.Now()).
    Find(&reminders)

=> 问题:自动预加载成功对象Action 并选择表Reminder 中的所有列。但是在表 User_Reminder

中遗漏了两列 Start_AtEnd_At

请帮我解决这个问题。在我的例子中,我想自动预加载对象 Action 并在连接两个表 ReminderUser_Reminder

时选择所有列

非常感谢。

最佳答案

@Anh Vinh Huynh Gorm Scan 方法不支持预加载,因此您必须改用 Find 方法。 (你的解决方案2) 并从

的 StartAt 和 EndAt 中删除 gorm:"-" 标签

关于戈尔姆 |如何使用扫描和预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821964/

相关文章:

go - Golang自定义类型FMT打印

postgresql - Postgres-最好在Postgres或base64中将字节数组存储为BYTEA或对值进行编码并将其存储为TEXT

go - “Go Concurrency Patterns: Timing out, moving on”博客中的非阻塞 channel

image - Go - 将 base64 字符串保存到文件

Gorm Scan 未绑定(bind)到结构

mysql - golang gorm 访问底层mysql查询

amazon-web-services - 模拟AWS Go SSM GetParameter调用

postgresql - 如何创建一个在列中包含 slice 的表

GORM 连接和结果

Gorm 按关联计数排序