
首先,我建议阅读文档。
这里有点解释。看来您使用旧版本的可能性更大。更新的文档说明了如何使用此标记
gorm:"PRELOAD",默认情况下将其设置为true。因此,如果您想禁用字段使用
gorm:"PRELOAD:false"。
之后,必须使用
db.Set("gorm:auto_preload",true)才能正确获取它。如果要通过应用程序使用预加载,则可以重新分配db以具有auto_preload功能:db = db.Set("gorm:auto_preload", true)例:
package mainimport "github.com/jinzhu/gorm"import _ "github.com/jinzhu/gorm/dialects/sqlite"type User struct { gorm.Model Name string Car Car Account Account `gorm:"PRELOAD:false"`}type Car struct { gorm.Model Type int UserID uint}type Account struct { gorm.Model Powerlevel int UserID uint}func main() { db, err := gorm.Open("sqlite3", "./data.db") db.LogMode(true) if err != nil { println(err.Error()) } //Migrate the tables db.AutoMigrate(&User{}) db.AutoMigrate(&Car{}) db.AutoMigrate(&Account{}) // Initialize our models var testUser User var car = Car{Type: 1994} var account = Account{Powerlevel: 9001} testUser.Name = "Jim Bob" testUser.Car = car testUser.Account = account // Save the user db.Create(&testUser) // Get a new user var newUser User // override db instance to always prefetch //db = db.Set("gorm:auto_preload", true) db.Set("gorm:auto_preload", true).First(&newUser) println(newUser.Name) println(newUser.Car.Type) println(newUser.Account.Powerlevel) // Explicitly preload // No need to use two seperate statements, you can just chain them :) db.Preload("Car").Preload("Account").First(&newUser) //db.Preload("Account").First(&newUser) println(newUser.Name) println(newUser.Car.Type) println(newUser.Account.Powerlevel)}输出:
(/home/william/main.go:46)[2018-06-15 08:56:53] [0.34ms] INSERT INTO "users" ("created_at","updated_at","deleted_at","name") VALUES ('2018-06-15 08:56:53','2018-06-15 08:56:53',NULL,'Jim Bob')[1 rows affected or returned ](/home/william/main.go:46)[2018-06-15 08:56:53] [0.11ms] INSERT INTO "cars" ("created_at","updated_at","deleted_at","type","user_id") VALUES ('2018-06-15 08:56:53','2018-06-15 08:56:53',NULL,'1994','9')[1 rows affected or returned ](/home/william/main.go:46)[2018-06-15 08:56:53] [0.10ms] INSERT INTO "accounts" ("created_at","updated_at","deleted_at","powerlevel","user_id") VALUES ('2018-06-15 08:56:53','2018-06-15 08:56:53',NULL,'9001','9')[1 rows affected or returned ](/home/william/main.go:51)[2018-06-15 08:56:53] [0.69ms] SELECT * FROM "users" WHERe "users"."deleted_at" IS NULL ORDER BY "users"."id" ASC LIMIT 1[1 rows affected or returned ](/home/william/main.go:51)[2018-06-15 08:56:53] [1.93ms] SELECT * FROM "cars" WHERe "cars"."deleted_at" IS NULL AND (("user_id" IN ('1'))) ORDER BY "cars"."id" ASC [1 rows affected or returned ]Jim Bob1994 <-- notice here preload is on0 <-- notice here preload was turned off Account Type(/home/william/main.go:59)[2018-06-15 08:56:53] [0.28ms] SELECT * FROM "users" WHERe "users"."deleted_at" IS NULL AND "users"."id" = '1' ORDER BY "users"."id" ASC LIMIT 1[1 rows affected or returned ](/home/william/main.go:59)[2018-06-15 08:56:53] [0.33ms] SELECT * FROM "cars" WHERe "cars"."deleted_at" IS NULL AND (("user_id" IN ('1'))) ORDER BY "cars"."id" ASC [1 rows affected or returned ](/home/william/main.go:60)[2018-06-15 08:56:53] [0.27ms] SELECT * FROM "users" WHERe "users"."deleted_at" IS NULL AND "users"."id" = '1' ORDER BY "users"."id" ASC LIMIT 1[1 rows affected or returned ](/home/william/main.go:60)[2018-06-15 08:56:53] [0.46ms] SELECT * FROM "accounts" WHERe "accounts"."deleted_at" IS NULL AND (("user_id" IN ('1'))) ORDER BY "accounts"."id" ASC[1 rows affected or returned ](/home/william/main.go:60)[2018-06-15 08:56:53] [0.40ms] SELECT * FROM "cars" WHERe "cars"."deleted_at" IS NULL AND (("user_id" IN ('1'))) ORDER BY "cars"."id" ASC [1 rows affected or returned ]Jim Bob19949001欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)