首页 > 解决方案 > 如何在同一张桌子上混合 Has One 关系和 Has Many 关系

问题描述

从基本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但不同时写它们。

任何想法 ?

标签: gogo-gorm

解决方案


推荐阅读