gorm-hasmany創(chuàng)建及查詢

hasmany

創(chuàng)建表并插入數(shù)據(jù)
package main
import (
  "fmt"
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

type Card struct {
  ID     uint
  UserID uint
  Name   string
}
type User struct {
  ID    uint
  Name  string
  Cards []Card
}

func main() {

  dsn := "root:He200203@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"

  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  if err != nil {
      fmt.Println("err", err)
  }
  c1 := Card{
      Name: "card1",
  }
  c2 := Card{
      Name: "card2",
  }
  u1 := User{
      Name: "user1",
      Cards: []Card{
          c1, c2,
      },
  }
  db.AutoMigrate(&User{}, &Card{})
  db.Create(&u1)
}
查詢操作
package main

import (
    "fmt"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

type Card struct {
    ID     uint
    UserID uint
    Name   string
}
type User struct {
    ID    uint
    Name  string
    Cards []Card
}

func main() {

    dsn := "root:He200203@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"

    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
        fmt.Println("err", err)
    }
    var uu User
    db.Preload("Cards").First(&uu)
    fmt.Println(uu)
}
{1 user1 [{1 1 card1} {2 1 card2}]}
帶條件的查詢
    var uu User
    db.Preload("Cards", func(db *gorm.DB) *gorm.DB {
        return db.Where("name=?", "card1")
    }).First(&uu)
    fmt.Println(uu)
    var uu User
    db.Preload("Cards", "name=?", "card1").First(&uu)
    fmt.Println(uu)
{1 user1 [{1 1 card1}]}

多級(jí)嵌套

結(jié)構(gòu)體定義
type Info struct {
    ID     uint
    Money  uint
    CardID uint
}
type Card struct {
    ID     uint
    UserID uint
    Name   string
    Info   Info
}
type User struct {
    ID    uint
    Name  string
    C
    Cards []Card
}
查詢
    var uu User
    db.Preload("Cards.Info").Preload("Cards").First(uu)
    fmt.Println(uu)
或者
    var uu User
    db.Preload("Cards.Info").First(uu)
    fmt.Println(uu)
帶條件的查詢
    var uu User
    db.Preload("Cards.Info").Preload("Cards","name=?","card1").First(uu)
    fmt.Println(uu)
    db.Preload("Cards", func(db *gorm.DB) *gorm.DB {
        return db.Joins("Info").Where("money>1000")
    })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容