• GORM关联查询


    一对一

    conf

    appname = beegogorm
    httpport = 8080
    runmode = dev
    mysqladmin="root"
    mysqlpwd="123456"
    mysqldb="itying"

    models

    core.go

    package models
    
    import (
    	"github.com/astaxie/beego"
    	"github.com/jinzhu/gorm"
    	_ "github.com/jinzhu/gorm/dialects/mysql"
    )
    
    var DB *gorm.DB
    var err error
    
    func init() {
    	mysqladmin := beego.AppConfig.String("mysqladmin")
    	mysqlpwd := beego.AppConfig.String("mysqlpwd")
    	mysqldb := beego.AppConfig.String("mysqldb")
    
    	//和数据库建立连接
    	//  DB, err = gorm.Open("mysql", "root:123456@/beego?charset=utf8&parseTime=True&loc=Local")
    	DB, err = gorm.Open("mysql", mysqladmin+":"+mysqlpwd+"@/"+mysqldb+"?charset=utf8&parseTime=True&loc=Local")
    
    	DB.LogMode(true) //开启sql日志
    
    	if err != nil {
    		beego.Error()
    	}
    
    }
    

    article.go

    package models
    
    import (
    	_ "github.com/jinzhu/gorm"
    )
    
    type Article struct {
    	Id          int         `json:"id"`
    	Title       string      `json:"title"`
    	CateId      string      `json:"cate_id"`
    	State       int         `json:"state"`
    	ArticleCate ArticleCate `gorm:"foreignkey:Id;association_foreignkey:CateId"`
    }
    
    func (Article) TableName() string {
    	return "article"
    }

    多对一/多对一

    articleCate.go

    package models
    
    import (
    	_ "github.com/jinzhu/gorm"
    )
    
    type ArticleCate struct {
    	Id      int       `json:"id"`
    	Title   string    `json:"title"`
    	State   int       `json:"state"`
    	Article []Article `gorm:"foreignkey:CateId;association_foreignkey:Id"`
    }
    
    func (ArticleCate) TableName() string {
    	return "article_cate"
    }

    controllers

    package controllers
    
    import (
    	"beegogorm/models"
    
    	"github.com/astaxie/beego"
    )
    
    type ArticleController struct {
    	beego.Controller
    }
    
    func (c *ArticleController) Get() {
    
    	//1、查询文章信息
    	article := []models.Article{}
    	models.DB.Find(&article)
    
    	//2、查询文章信息的时候关联文章分类  (1对1--》文章 对 文章分类)
    	article := []models.Article{}
    	models.DB.Preload("ArticleCate").Find(&article)
    
    	// 3、查询文章分类信息的时候关联文章  (1对多--》文章分类 对 文章)  
    	articleCate := []models.ArticleCate{}
    	models.DB.Preload("Article").Find(&articleCate)
    	// 一对多和一多一写法一样的
    	
    	// 4、查询文章分类信息的时候关联文章   条件判断
    	articleCate := []models.ArticleCate{}
    	models.DB.Preload("Article").Where("id>1").Find(&articleCate)
    
    	articleCate := []models.ArticleCate{}
    	models.DB.Preload("Article", "id>3").Where("id>1").Find(&articleCate)
    
    	c.Data["json"] = articleCate
    	c.ServeJSON()
    }

    多对多

    一个学生选修多门课程

    一个课程也可以被多个学生选修

    需要第三张表

    models

    lesson.go 课程表

    package models
    
    import (
    	_ "github.com/jinzhu/gorm"
    )
    
    type Lesson struct {
    	Id      int       `json:"id"`
    	Name    string    `json:"name"`
    	Student []Student `gorm:"many2many:lesson_student;"`
    }
    
    func (Lesson) TableName() string {
    	return "lesson"
    }
    

    student.go 学生表

    package models
    
    import (
    	_ "github.com/jinzhu/gorm"
    )
    
    type Student struct {
    	Id       int
    	Number   string
    	Password string
    	ClassId  int
    	Name     string
    	Lesson   []Lesson `gorm:"many2many:lesson_student;"`
    }
    
    func (Student) TableName() string {
    	return "student"
    }

    lessonStudent.go 关联表

    package models
    
    import (
    	_ "github.com/jinzhu/gorm"
    )
    
    type LessonStudent struct {
    	LessonId  int `json:"lesson_id"`
    	StudentId int `json:"student_id"`
    }
    
    func (LessonStudent) TableName() string {
    	return "lesson_student"
    }
    

      

  • 相关阅读:
    集合 Subset Sums
    resin config 中文(resin.xml)
    resin4 简单学习
    什么是敏捷软件测试
    10个热门IT证书
    LoadRunner监控Linux服务器
    Agile 敏捷开发
    戴明PDCA方法
    【转】什么是内存泄露? 内存泄露检测工具
    LoadRunner常见问题
  • 原文地址:https://www.cnblogs.com/yzg-14/p/13418595.html
Copyright © 2020-2023  润新知