Как смешать отношения Has One и Has Many на одном столе - PullRequest
1 голос
/ 06 февраля 2020

Начиная с базовых c Has Many отношений

type Owner struct {
    ID         uint      `gorm:"primary_key"`
    Owned      []Owned   `gorm:"foreignkey:OwnerId"`
}

typ Owned struct{
    ID         uint      `gorm:"primary_key"`
    OwnerId    uint
}

Ведьма дала следующую SQL базу данных

Owner
ID 
1
2

Owned 
ID | OwnerId
1  |       1
2  |       1
3  |       1
4  |       2
5  |       2

Я хотел бы иметь столбец FavoriteOwnedId в таблице владельца, чтобы сослаться на мою любимую строку. Что должно выглядеть так:

Owner
ID | FavoriteOwnedId
1  |               2
2  |               5

Owned 
ID | OwnerId
1  |       1
2  |       1
3  |       1
4  |       2
5  |       2

Я предполагаю, что что-то вроде следующего позволит мне получить это

owner := &Owner
db.Where("id = ?", someId).
   Preload("FavoriteOwned").
   Preload("Owned").
   First(&owner)

Но я не могу найти способ написать необходимый тег gorm, чтобы сделать это работает. Мне удается написать Has One или Has Many, но я не пишу их одновременно.

Есть идеи?

...