如何对具有GORM的标准化表进行适当的模型关联?

问题描述 投票:0回答:1

假设我有一些以这种方式规范化的用户权限表:

entity-relationship-diagram

这三个表的模型如下所示:

type Role struct {
    RoleID      string             `gorm:"type:varchar(25); primary_key" json:"id"`
    Name        string             `gorm:"type:varchar(50)" json:"name"`
    Description string             `gorm:"type:text(250)" json:"description"`
    CreatedAt   string             `gorm:"type:timestamp" json:"createdAt"`
    Permission  []PermissionToRole `gorm:"foreignkey:RoleID; association_foreignkey:RoleID" json:"permissions"`
}

type Permission struct {
    PermID      string `json:"id" gorm:"column:permission_id; type:varchar(25); primary_key"`
    Name        string `json:"name" gorm:"type:varchar(50)"`
    Description string `json:"description" gorm:"text(250)"`
}

type PermissionToRole struct {
    RoleID     string     `json:"-" gorm:"type:varchar(25); primary_key"`
    PermID     string     `json:"-" gorm:"column:permission_id; type:varchar(25); primary_key"`
    Permission Permission `gorm:"foreignkey:PermID; association_foreignkey:PermID" json:"permissions"`
}

但是这种模型的结果不是我想要的那样。我希望创建一个Permission数组,但这是它的外观(当打印到JSON时):

"permissions": [
    {
        "permissions": {
            "id": "create_user",
            "name": "Create user account",
            "description": "Give the permission to create a user account"
        }  
    }
]

我想要的是:

"permissions": [
    {
        "id": "create_user",
        "name": "Create user account",
        "description": "Give the permission to create a user account"
    }
]

有人对此有答案吗?需要帮助。谢谢。

go gorm go-gorm
1个回答
0
投票

[此处,Role.PermissionPermissionToRole类型的切片。您可以直接使用Permission类型的切片,而不是使用PermissionToRole获得预期的输出。

type Role struct {
    RoleID      string             `gorm:"type:varchar(25); primary_key" json:"id"`
    Name        string             `gorm:"type:varchar(50)" json:"name"`
    Description string             `gorm:"type:text(250)" json:"description"`
    CreatedAt   string             `gorm:"type:timestamp" json:"createdAt"`
    Permission  []Permission       `json:"permissions"`
}

type Permission struct {
    PermID      string `json:"id" gorm:"column:permission_id; type:varchar(25); primary_key"`
    Name        string `json:"name" gorm:"type:varchar(50)"`
    Description string `json:"description" gorm:"text(250)"`
}

至JSON:

"permissions": [
    {
        "id": "create_user",
        "name": "Create user account",
        "description": "Give the permission to create a user account"
    }
]
© www.soinside.com 2019 - 2024. All rights reserved.