Golang GORM系列:定义GORM模型及关系指南

使用GORM进行数据库管理的核心是定义模型的技能。模型是程序的面向对象结构和数据库的关系世界之间的纽带。本文深入研究了在GORM中创建成功模型的艺术,研究了如何设计结构化的Go结构,用标记注释字段,以及开发跨模型的链接,以便最大限度地发挥应用程序数据库交互的潜力。

在这里插入图片描述

在GORM中创建结构模型

良好定义的结构模型是基于gorm的应用程序的大脑。结构模型中的每个字段对应于数据库表中的一列,该列由结构模型表示。结构模型是这样制作的:

package models

import (
    "gorm.io/gorm"
)

type User struct {
   
   
    gorm.Model
    Name  string
    Email string `gorm:"uniqueIndex"`
    Age   int
}

上面示例中, User struct 模型定义数据库表的列: ID, CreatedAt, UpdatedAt, DeletedAt, Name, Email, Age.

为字段映射添加标签

GORM依赖于结构体标记将结构体字段映射到数据库列。标签提供指导GORM进行数据库操作的元数据。常见标签包括:

  • gorm:"primaryKey": 标记字段为 primary key.
  • gorm:"uniqueIndex": 定义字段为唯一索引.
  • gorm:"not null": 标记字段不能为空.
  • gorm:"column:custom_name": 映射字段为自定义的名称.
type Product struct {
   
   
    gorm.Model
    Name     string
    Price    float64
    Category string `gorm:"column:item_category"`
}

在这个例子中,“Category”字段被映射到“item_category”列。

模型关联和关系

GORM擅长对表之间的复杂关系进行建模。关联定义了不同的模型如何相互关联,使您能够轻松地获取相关数据。

一对一的关系:

type User struct {
   
   
    gorm.Model
    Profile Profile
}

type Profile struct {
   
   
    gorm.Model
    UserID  uint
    Address string
}

在这个例子中,一个“User”对应一个“Profile”。‘ Profile ’结构中的‘ UserID ’字段用作外键。

一对多的关系:

type User struct {
   
   
    gorm.Model
    Orders []Order
}

type Order struct {
   
   
    gorm.Model
    UserID  uint
    Product string
}

在这里,一个“User”可以有多个“Order”,每个订单都通过“UserID”外键与用户相关联。

多对多关系:

// User 定义用户模型
type User struct {
   
   
    gorm.Model
    Name  string
    Roles []Role `gorm:"many2many:user_roles;"`
}
// Role 定义角色模型
type Role struct {
   
   
    gorm.Model
    Name  string
    Users []User `gorm:"many2many:user_roles;"`
}

这个例子演示了“User”和“Role”模型之间的多对多关系。GORM处理中间表user_roles的创建。

在查询中使用关联

关联简化了对相关数据的查询。例如,获取用户的订单:

var user User
db.Preload(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值