下面是一個程式(基于 GORM),它定義了兩個資料庫表(users和cards),其邏輯是用戶擁有一張卡。然后它創建資料庫,填寫它,搜索并列印出其中唯一的記錄。
我的問題:最終搜索中的卡是空的,它沒有附加到用戶。
從資料庫的角度來看,一切都很好:
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:
uj5u.com熱心網友回復:
go-gorm不會自動加載嵌套物件,您必須指定要加載嵌套物件。在您的情況下,UserCard是 的嵌套物件User。在這里,您可以看到有關如何使用該Preload函式執行此操作的更多詳細資訊,但它應該如下所示:
var myUser User
db.Preload("UserCard").Where(map[string]interface{}{"name": "john"}).First(&myUser)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/429829.html
上一篇:Go中的介面字面量
