1 回答

TA贡献1876条经验 获得超6个赞
When I query that certain Delivery
你好?
如果使用预加载 db.Preload("Message").Preload("Receiver").First(&d3)
您将获得接收器和消息的指示,例如
如果不使用预加载,您将获得包含空消息和接收方对象的传递。
如果只需要消息 Id 和接收方 ID,则应将 更改为 和Message Message Message *Message Receiver ReceiverReceiver *Receiver
如果您使用预加载 ->与上述相同
如果不使用预加载 ->则接收方和消息将为零
以下是所有测试代码和调试信息:
type User3 struct {
gorm.Model
Name string
}
type Message struct {
gorm.Model
UserID uint `json:"userId"`
User *User3
Content string `json:"content"`
}
type Receiver struct {
gorm.Model
UserID uint `json:"userId"`
User *User3
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
Email string `json:"email"`
Address string `json:"address"`
Phone string `json:"phone"`
}
type Delivery struct {
gorm.Model
Message *Message `json:"message"`
MessageID uint `json:"messageId"`
Receiver *Receiver `json:"Receiver"`
ReceiverID uint `json:"receiverId"`
DeliveryDate time.Time `json:"deliveryDate"`
Sent bool `json:"sent"`
}
func main() {
db := config.CreateMysql()
db.AutoMigrate(Delivery{})
d := Delivery{Message: &Message{User: &User3{Name: "a"}, Content: "hello b~"}, Receiver: &Receiver{User: &User3{Name: "b"}}, DeliveryDate: time.Now(), Sent: false}
db.Create(&d)
d2 := Delivery{}
db.First(&d2)
fmt.Printf("%v\n", d2)
d3 := Delivery{}
db.Preload("Message").Preload("Receiver").First(&d3)
fmt.Printf("%v\n", d3)
}
ps:以上用户为零,如果要预加载嵌套关联,请使用以下方法:https://gorm.io/docs/preload.html.Preload("Message.User")
- 1 回答
- 0 关注
- 61 浏览
添加回答
举报