簡體   English   中英

為什么“屬於”關系中的鏈接記錄為空?

[英]Why is a linked record in a "Belongs To" relation empty?

下面是一個程序(基於 GORM),它定義了兩個數據庫表( userscards ),其中包含一個用戶擁有一張卡的邏輯。 然后它創建數據庫,填充它,搜索並打印出其中唯一的記錄。

我的問題:終極搜索里的卡是空的,沒有附在用戶身上。

從數據庫的角度來看,一切正常:

SELECT * FROM users

id  name    card_id
1   john    1

SELECT * FROM cards

id  number
1   42

請注意,第一個結果中的card_id正確指向卡的id

為什么我上次搜索返回的是一張空卡片?

package main

import (
    "fmt"

    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

type User struct {
    ID     uint
    Name   string
    UserCard   Card
    CardID uint
}

type Card struct {
    ID     uint
    Number string
}

func main() {
    // initialize the database
    db, _ := gorm.Open(sqlite.Open("mytest.sqlite"), &gorm.Config{})
    db.AutoMigrate(&User{}, &Card{})
    // create one card
    db.Create(&Card{
        Number: "42",
    })
    // find that card
    var myCard Card
    db.Where(map[string]interface{}{"number": "42"}).First(&myCard)
    // create a user with that card
    db.Create(&User{
        Name: "john",
        UserCard: myCard,
    })
    // find that user
    var myUser User
    db.Where(map[string]interface{}{"name": "john"}).First(&myUser)
    // print his name and card number
    // the problem is here: the card number is empty, as if the card was not linked
    fmt.Printf("name: %v, number: %v", myUser.Name, myUser.UserCard.Number)
}

// output
// name: john, number: 

go-gorm不會自動加載嵌套對象,你必須指定你想要加載嵌套對象。 在您的情況下, UserCardUser的嵌套 object 。 在這里您可以看到有關如何使用Preload function 執行此操作的更多詳細信息,但它應該看起來像這樣:

var myUser User
db.Preload("UserCard").Where(map[string]interface{}{"name": "john"}).First(&myUser)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM