Как установить структурный тег для Entity A, может иметь B в GORM и сделать, чтобы create и preload работали автоматически - PullRequest
0 голосов
/ 31 января 2019

Предположим, у меня есть структуры BaseNotification и ExtendedNotification.

Для некоторых уведомлений они используют только таблицу base_notificaion, но некоторые из них сохранят некоторые дополнительные данные в extended_notificaion.

Как настроить тег структуры в этих двух структурах, чтобы при запуске

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

GORM знал, что при необходимости необходимо вставить новый кортеж в extended_notification (например, либоне nil или поля заполнены)

И когда я позвоню

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

, он будет соответственно захватывать все необходимые объекты?

1 Ответ

0 голосов
/ 31 января 2019

Если вы уверены, что идентификатор первичного ключа A является внешним ключом в 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
}
...