最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang?gorm的關(guān)系關(guān)聯(lián)實現(xiàn)示例

 更新時間:2022年04月15日 14:39:18   作者:Jeff的技術(shù)棧  
這篇文章主要為大家介紹了golang?gorm的關(guān)系關(guān)聯(lián)實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪

1. 關(guān)聯(lián)

1.1. 屬于

// `User`屬于`Profile`, `ProfileID`為外鍵
type User struct {
  gorm.Model
  Profile   Profile
  ProfileID int
}
type Profile struct {
  gorm.Model
  Name string
}
db.Model(&user).Related(&profile)
//// SELECT * FROM profiles WHERE id = 111; // 111是user的外鍵ProfileID

指定外鍵

type Profile struct {
    gorm.Model
    Name string
}
type User struct {
    gorm.Model
    Profile      Profile `gorm:"ForeignKey:ProfileRefer"` // 使用ProfileRefer作為外鍵
    ProfileRefer int
}

指定外鍵和關(guān)聯(lián)外鍵

type Profile struct {
    gorm.Model
    Refer string
    Name  string
}
type User struct {
    gorm.Model
    Profile   Profile `gorm:"ForeignKey:ProfileID;AssociationForeignKey:Refer"`
    ProfileID int
}

1.2. 包含一個

// User 包含一個 CreditCard, UserID 為外鍵
type User struct {
    gorm.Model
    CreditCard   CreditCard
}
type CreditCard struct {
    gorm.Model
    UserID   uint
    Number   string
}
var card CreditCard
db.Model(&user).Related(&card, "CreditCard")
//// SELECT * FROM credit_cards WHERE user_id = 123; // 123 is user's primary key
// CreditCard是user的字段名稱,這意味著獲得user的CreditCard關(guān)系并將其填充到變量
// 如果字段名與變量的類型名相同,如上例所示,可以省略,如:
db.Model(&user).Related(&card)

指定外鍵

type Profile struct {
  gorm.Model
  Name      string
  UserRefer uint
}
type User struct {
  gorm.Model
  Profile Profile `gorm:"ForeignKey:UserRefer"`
}

指定外鍵和關(guān)聯(lián)外鍵

type Profile struct {
  gorm.Model
  Name   string
  UserID uint
}
type User struct {
  gorm.Model
  Refer   string
  Profile Profile `gorm:"ForeignKey:UserID;AssociationForeignKey:Refer"`
}

1.3. 包含多個

// User 包含多個 emails, UserID 為外鍵
type User struct {
    gorm.Model
    Emails   []Email
}
type Email struct {
    gorm.Model
    Email   string
    UserID  uint
}
db.Model(&user).Related(&emails)
//// SELECT * FROM emails WHERE user_id = 111; // 111 是 user 的主鍵

指定外鍵

type Profile struct {
  gorm.Model
  Name      string
  UserRefer uint
}
type User struct {
  gorm.Model
  Profiles []Profile `gorm:"ForeignKey:UserRefer"`
}

指定外鍵和關(guān)聯(lián)外鍵

type Profile struct {
  gorm.Model
  Name   string
  UserID uint
}
type User struct {
  gorm.Model
  Refer   string
  Profiles []Profile `gorm:"ForeignKey:UserID;AssociationForeignKey:Refer"`
}

1.4. 多對多

// User 包含并屬于多個 languages, 使用 `user_languages` 表連接
type User struct {
    gorm.Model
    Languages         []Language `gorm:"many2many:user_languages;"`
}
type Language struct {
    gorm.Model
    Name string
}
db.Model(&user).Related(&languages, "Languages")
//// SELECT * FROM "languages" INNER JOIN "user_languages" ON "user_languages"."language_id" = "languages"."id" WHERE "user_languages"."user_id" = 111

指定外鍵和關(guān)聯(lián)外鍵

type CustomizePerson struct {
  IdPerson string             `gorm:"primary_key:true"`
  Accounts []CustomizeAccount `gorm:"many2many:PersonAccount;ForeignKey:IdPerson;AssociationForeignKey:IdAccount"`
}
type CustomizeAccount struct {
  IdAccount string `gorm:"primary_key:true"`
  Name      string
}

譯者注:這里設(shè)置好像缺失一部分

1.5. 多種包含

支持多種的包含一個和包含多個的關(guān)聯(lián)

type Cat struct {
    Id    int
    Name  string
    Toy   Toy `gorm:"polymorphic:Owner;"`
  }
  type Dog struct {
    Id   int
    Name string
    Toy  Toy `gorm:"polymorphic:Owner;"`
  }
  type Toy struct {
    Id        int
    Name      string
    OwnerId   int
    OwnerType string
  }

注意:多態(tài)屬性和多對多顯式不支持,并且會拋出錯誤。

1.6. 關(guān)聯(lián)模式

關(guān)聯(lián)模式包含一些幫助方法來處理關(guān)系事情很容易。

// 開始關(guān)聯(lián)模式
var user User
db.Model(&user).Association("Languages")
// `user`是源,它需要是一個有效的記錄(包含主鍵)
// `Languages`是關(guān)系中源的字段名。
// 如果這些條件不匹配,將返回一個錯誤,檢查它:
// db.Model(&user).Association("Languages").Error
// Query - 查找所有相關(guān)關(guān)聯(lián)
db.Model(&user).Association("Languages").Find(&languages)
// Append - 添加新的many2many, has_many關(guān)聯(lián), 會替換掉當前 has_one, belongs_to關(guān)聯(lián)
db.Model(&user).Association("Languages").Append([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Append(Language{Name: "DE"})
// Delete - 刪除源和傳遞的參數(shù)之間的關(guān)系,不會刪除這些參數(shù)
db.Model(&user).Association("Languages").Delete([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Delete(languageZH, languageEN)
// Replace - 使用新的關(guān)聯(lián)替換當前關(guān)聯(lián)
db.Model(&user).Association("Languages").Replace([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Replace(Language{Name: "DE"}, languageEN)
// Count - 返回當前關(guān)聯(lián)的計數(shù)
db.Model(&user).Association("Languages").Count()
// Clear - 刪除源和當前關(guān)聯(lián)之間的關(guān)系,不會刪除這些關(guān)聯(lián)
db.Model(&user).Association("Languages").Clear()

以上就是golang gorm的關(guān)系關(guān)聯(lián)實現(xiàn)示例的詳細內(nèi)容,更多關(guān)于golang gorm的關(guān)系關(guān)聯(lián)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go語言基礎(chǔ)語法之結(jié)構(gòu)體及方法詳解

    Go語言基礎(chǔ)語法之結(jié)構(gòu)體及方法詳解

    結(jié)構(gòu)體類型可以用來保存不同類型的數(shù)據(jù),也可以通過方法的形式來聲明它的行為。本文將介紹go語言中的結(jié)構(gòu)體和方法,以及“繼承”的實現(xiàn)方法
    2021-09-09
  • Go語言學(xué)習(xí)教程之反射的示例詳解

    Go語言學(xué)習(xí)教程之反射的示例詳解

    這篇文章主要通過記錄對reflect包的簡單使用,來對反射有一定的了解。文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定幫助,需要的可以參考一下
    2022-09-09
  • Golang中的panic之避免和處理程序中的異常情況

    Golang中的panic之避免和處理程序中的異常情況

    Golang中的panic是一種異常處理機制,可以在程序出現(xiàn)異常情況時終止程序并打印錯誤信息。為了避免panic對程序的影響,開發(fā)者可以采用一系列技巧,如defer+recover、編寫可重入的代碼、使用錯誤返回值等。這些技巧可以幫助開發(fā)者優(yōu)雅地處理程序中的異常情況
    2023-04-04
  • Golang實現(xiàn)字符串倒序的幾種解決方案

    Golang實現(xiàn)字符串倒序的幾種解決方案

    給定一個字符串,按單詞將該字符串逆序是我們大家在開發(fā)中可能會遇到的一個需求,所以下面這篇文章主要給大家介紹了關(guān)于Golang如何實現(xiàn)字符串倒序的幾種解決方案,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • golang sql語句超時控制方案及原理

    golang sql語句超時控制方案及原理

    一般應(yīng)用程序在執(zhí)行一條sql語句時,都會給這條sql設(shè)置一個超時時間,本文主要介紹了golang sql語句超時控制方案及原理,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • go中如何獲取本機ip地址

    go中如何獲取本機ip地址

    這篇文章主要介紹了go中如何獲取本機ip地址問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Go語言實現(xiàn)聊天小工具的示例代碼

    Go語言實現(xiàn)聊天小工具的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Go語言實現(xiàn)聊天小工具,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go使用Gin+mysql實現(xiàn)增刪改查的詳細實例

    Go使用Gin+mysql實現(xiàn)增刪改查的詳細實例

    golang本身沒有提供連接mysql的驅(qū)動,但是定義了標準接口供第三方開發(fā)驅(qū)動,下面這篇文章主要給大家介紹了關(guān)于Go使用Gin+mysql實現(xiàn)增刪改查的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • go語言題解LeetCode1122數(shù)組的相對排序

    go語言題解LeetCode1122數(shù)組的相對排序

    這篇文章主要為大家介紹了go語言題解LeetCode1122數(shù)組的相對排序,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 如何在golang中檢查文件是否存在

    如何在golang中檢查文件是否存在

    如果你用的是?Python,可通過?os.path.exists?這樣的標準庫函數(shù)實現(xiàn),遺憾的是,Go?標準庫沒有提供這樣直接的函數(shù),所以下面我們就來了解下如何使用GO語言能實現(xiàn)檢查文件是否存在呢
    2024-02-02

最新評論

忻州市| 冀州市| 突泉县| 东阿县| 玛曲县| 静宁县| 罗甸县| 盐津县| 吉水县| 新巴尔虎右旗| 定陶县| 临夏市| 阳山县| 大冶市| 固镇县| 留坝县| 桂阳县| 朝阳市| 合阳县| 仙游县| 屯门区| 桃源县| 和顺县| 沅陵县| 西盟| 遂溪县| 金平| 绿春县| 饶阳县| 得荣县| 张北县| 永城市| 太仆寺旗| 东莞市| 浑源县| 新郑市| 高陵县| 武清区| 鹤岗市| 峨眉山市| 苗栗市|