GORM高級查詢


models

nav.go

package models

type Nav struct {
	Id     int    `json:"id"`
	Title  string `json:"title"`
	Url    string `json:"url"`
	Status int    `json:"status"`
	Sort   int    `json:"sort"`
}

func (n Nav) TableName() string {
	return "nav"
}

controllers

nav.go

package controllers

import (
	"beegogorm/models"

	"github.com/astaxie/beego"
)

type NavController struct {
	beego.Controller
}

func (c *NavController) Get() {

	// 查詢全部數據
	nav := []models.Nav{} // nav實例,查詢的數據是集合
	models.DB.Find(&nav)  // &nav 把查到的數據賦值給nav

	// 查詢一條數據
	nav := models.Nav{Id: 3} // 獲取Id等於3的數據
	models.DB.Find(&nav)

	/*
		1、Where條件
		=
		<
		>
		<=
		>=
		!=
		IS NOT NULL
		IS NULL
		BETWEEN AND
		NOT BETWEEN AND
		IN
		OR
		AND
		NOT
		LIKE
	*/
	// 查詢id大於3的數據
	nav := []models.Nav{}
	models.DB.Where("id<3").Find(&nav)

	// 查詢id大於5的數據
	var n = 5
	nav := []models.Nav{}
	models.DB.Where("id>?", n).Find(&nav) // 動態的數據使用占位符

	var n1 = 3
	var n2 = 9
	nav := []models.Nav{}
	models.DB.Where("id > ? AND id < ?", n1, n2).Find(&nav)

	// 查詢id等於3 5 6的數據
	nav := []models.Nav{}
	models.DB.Where("id in (?)", []int{3, 5, 6}).Find(&nav)

	// 查詢標題有 會 的數據
	nav := []models.Nav{}
	models.DB.Where("title like ?", "%會%").Find(&nav)

	// 查詢id在什么之間
	nav := []models.Nav{}
	models.DB.Where("id between ? and ?", 3, 6).Find(&nav)

	/*
		2、Or 條件
	*/
	nav := []models.Nav{}
	models.DB.Where("id=? OR id=?", 2, 3).Find(&nav)
	// 另一種寫法
	nav := []models.Nav{}
	models.DB.Where("id=?", 2).Or("id=?", 3).Or("id=4").Find(&nav)

	/*
		3、選擇字段查詢
	*/
	nav := []models.Nav{}
	models.DB.Select("id, title, url").Find(&nav)

	/*
		4、SubQuery 子查詢
		models.DB.Table("user").Select("avg(age)").SubQuery()
	*/
	user := []models.User{}
	// 先查出平均年齡 models.DB.Table("user").Select("avg(age)").SubQuery()
	// 在當做參數傳給問號
	// 在Find一下
	models.DB.Where("age<?", models.DB.Table("user").Select("avg(age)").SubQuery()).Find(&user)
	c.Data["json"] = user
	c.ServeJSON()

	/*
		5、排序 Limit 、Offset

	*/
	nav := []models.Nav{}
	// id Asc 按照id進行升序排序
	// desc 降序
	models.DB.Where("id>2").Order("id Asc").Find(&nav)

	nav := []models.Nav{}
	models.DB.Where("id>2").Order("sort Desc").Order("id Asc").Find(&nav)
	
	// 只要前面兩條
	nav := []models.Nav{}
	models.DB.Where("id>1").Limit(2).Find(&nav)

	// 跳過2條查詢2條
	nav := []models.Nav{}
	models.DB.Where("id>1").Offset(2).Limit(2).Find(&nav)
	
	/*
		6、總數
	*/
	// 分頁時用到
	nav := []models.Nav{}
	var num int
	models.DB.Where("id > ?", 2).Find(&nav).Count(&num)

	c.Data["json"] = num
	c.ServeJSON()

	// 上面每一個nav,都需要封裝和返回,只寫一個在這
	c.Data["json"] = nav // 封裝json
	c.ServeJSON()        // 返回json

}

  

  


免責聲明!

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



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