我是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
}
我的要求:我想一次获得
Reminder
的所有UserID
。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
无法预加载。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
中的所有列。但是错过了表Start_At
中的两列End_At
和User_Reminder
请帮我这个问题。就我而言,我想自动预加载对象Action并在连接两个表
Reminder
和User_Reminder
时选择所有列非常感谢。
最佳答案
@安荣·休恩
Gorm Scan方法不支持预加载,因此您必须使用Find方法。 (您的Soloution2)
并从的StartAt和EndAt删除gorm:"-"
标记
关于go - Go-Gorm |如何使用扫描和预加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55821964/