zoukankan      html  css  js  c++  java
  • gorm关联关系

    package main
    
    import (
    	"fmt"
    	"github.com/gin-gonic/gin"
    	"github.com/jinzhu/gorm"
    	_ "github.com/jinzhu/gorm/dialects/mysql"
    	"net/http"
    )
    
    type Class struct {
    	// 班级,一个学生有一个班级,一个班级有多个学生
    	gorm.Model
    	ClassName string    `json:"class_name"`
    	Students  []Student `json:"students"` // 一个班级有多个学生,一对多关系
    }
    
    type Student struct {
    	// 学生
    	gorm.Model
    	StudentName string `json:"student_name"`
    	Class       Class  `json:"class"`
    	ClassID     uint   `json:"class_id"` // 一个学生有一个班级,对应一个班级有多个学生,学生通过ClassID来知道是属于哪个班级的
    	IDCard      IDCard `json:"id_card"`  // 一个学生对应一个身份证,一对一关系
    	// 一个学生有多个老师, 与老师建立多对多的关系
    	Teachers []Teacher `gorm:"many2many:student_teacher" json:"teachers"` // 会产生一个关联表
    }
    
    type IDCard struct {
    	// 身份证
    	gorm.Model
    	Num       int  `json:"num"`
    	StudentID uint `json:"student_id"`
    }
    
    type Teacher struct {
    	// 老师
    	gorm.Model
    	TeacherName string `json:"teacher_name"`
    	// 一个老师有多个学生,与学生建立多对多的关系
    	Students []Student `gorm:"many2many:student_teacher" json:"students"` // 会产生一个关联表
    }
    
    func main() {
    	db, err := gorm.Open("mysql", "root:leon110...@tcp(10.227.10.172:3306)/cache?charset=utf8&parseTime=True")
    	if err != nil {
    		panic(err.Error())
    	}
    	defer db.Close()
    	//card := IDCard{
    	//	Num: 12345,
    	//}
    	//s := Student{
    	//	StudentName: "alex",
    	//	IDCard:      card,
    	//	Teachers: []Teacher{t},
    	//}
    	//
    	//t := Teacher{
    	//	TeacherName: "qm",
    	//	Students: []Student{s},
    	//}
    	//C := Class{
    	//	ClassName: "xueqianban",
    	//	Students:  []Student{s}, // 给班级里面添加学生
    	//}
    
    	db.AutoMigrate(&IDCard{}, &Teacher{}, &Class{}, &Student{})
    	// err = db.Create(&card).Error
    	//db.Create(&C)
    	//db.Create(&t)
    	r := gin.Default()
    	r.POST("/student", func(context *gin.Context) {
    		var student Student
    		_ = context.BindJSON(&student)
    		db.Create(&student)
    		context.JSON(http.StatusOK, "ok")
    	})
    	r.GET("/student/:ID", func(context *gin.Context) {
    		id := context.Param("ID")
    		fmt.Printf("id=%s
    ", id)
    		var student Student
    		_ = context.BindJSON(&student)
    		// 预加载
    		db.Preload("Teachers").Preload("IDCard").Preload("Class").First(&student, "id = ?", id)
    		context.JSON(http.StatusOK, gin.H{
    			"data": student,
    		})
    	})
    
    	r.GET("/class/:ID", func(context *gin.Context) {
    		id := context.Param("ID")
    		var c Class
    		// 嵌套预加载
    		db.Preload("Students").Preload("Students.IDCard").Preload("Students.Teachers").First(&c, "id=?", id)
    		context.JSON(http.StatusOK, gin.H{
    			"data": c,
    		})
    	})
    	r.Run(":8888")
    }
    
    
    
  • 相关阅读:
    codevs 1115 开心的金明
    POJ 1125 Stockbroker Grapevine
    POJ 2421 constructing roads
    codevs 1390 回文平方数 USACO
    codevs 1131 统计单词数 2011年NOIP全国联赛普及组
    codevs 1313 质因数分解
    洛谷 绕钉子的长绳子
    洛谷 P1276 校门外的树(增强版)
    codevs 2627 村村通
    codevs 1191 数轴染色
  • 原文地址:https://www.cnblogs.com/forsaken627/p/13604565.html
Copyright © 2011-2022 走看看