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"
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM