首页 > 解决方案 > 如何为实体 A 设置结构标记可能在 GORM 中有 B 并使创建和预加载自动工作

问题描述

考虑我有BaseNotificationExtendedNotification结构。

对于某些通知,他们base_notificaion只使用表格,但其中一些会将一些额外的数据保存到extended_notificaion.

如何在这两个结构中设置结构标记,以便在我运行时

db.Create(&entendedNotification) // or something else

如果需要,GORM 会知道它需要插入一个新元组extended_notification(例如它不是nil或字段已填充)

当我打电话时

db.Preload(`ExtendedNotification`).Find(&notifications)

它会相应地抓住所有必要的实体吗?

标签: gogo-gorm

解决方案


如果您确保 A 的主键 id 是 B 中的外键,请像这样使用

type A struct{
    Id int `gorm:"column:id"`
    B []B `gorm:"column:b;ForeignKey:Aid"`
}
type B struct{
    Aid int 
}

如果没有,我建议使用

func (a *A) AfterFind()error{
    return db.Model(&B{}).Find(&a.B).Error
}

推荐阅读