带有gorm的自动预加载无法正常工作

带有gorm的自动预加载无法正常工作,第1张

带有gorm的自动预加载无法正常工作

首先,我建议阅读文档
这里有点解释。看来您使用旧版本的可能性更大。更新的文档说明了如何使用此标记

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5013059.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-15
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存