简体   繁体   中英

panic: reflect: call of reflect.Value.Interface on zero Value on GORM .Create()

I'm new to go and Backend and I'm Trying to make many-to-many relation between tables. I used this repo to make model: https://github.com/harranali/gorm-relationships-examples/tree/main/many-to-many
I Used GORM with postgresql.
My model:

type Book struct {
    gorm.Model
    Title       string         `json:"title"`
    Author      string         `json:"author"`
    Description string         `json:"description"`
    Category    string         `json:"Category"`
    Publisher   string         `json:"publisher"`
    AuthorsCard []*AuthorsCard `gorm:"many-to-many:book_authorscard;" json:"authorscard"`
}

type AuthorsCard struct {
    gorm.Model
    Name        string `json:"name"`
    Age         int    `json:"age"`
    YearOfBirth int    `json:"year"`
    Biography   string `json:"biography"`
}

After connecting to database and AutoMigrating:

func init() {
    config.Connect()
    db = config.GetDB()
    db.AutoMigrate(&models.Book{}, &models.AuthorsCard{})
}

I've created Function to see how that relation works:

func TestCreate() {

var AuthorsCard = []models.AuthorsCard{
        {
            Age:         23,
            Name:        "test",
            YearOfBirth: 1999,
            Biography:   "23fdgsdddTEST",
        },
    }
    db.Create(&AuthorsCard)
    var testbook = models.Book{
        Title:       "Test",
        Author:      "tst",
        Description: "something",
    }
    db.Create(&testbook)

    db.Model(&testbook).Association("AuthorsCard").Append(&AuthorsCard)
} 

But got This Error: panic: reflect: call of reflect.Value.Interface on zero Value [recovered] panic: reflect: call of reflect.Value.Interface on zero Value

How can I deal with this "Null" problem and make proper relation?

UPD: The First part of a problem was connected to a version of GORM, After I changed old version(github.com/jinzhu/gorm v1.9.16) to new version (gorm.io/gorm v1.23.6) the problem with reflect Error gone. but now, when I want to create new book, I get this Error:

/go/pkg/mod/gorm.io/driver/postgres@v1.3.7/migrator.go:119 ERROR: there is no unique constraint matching given keys for referenced table "authors_cards" (SQLSTATE 42830) [28.440ms] [rows:0] CREATE TABLE "book_authorscard" ("book_id" bigint,"authors_card_id" bigint,PRIMARY KEY ("book_id","authors_card_id"),CONSTRAINT "fk_book_authorscard_authors_card" FOREIGN KEY ("authors_card_id") REFERENCES "authors_cards"("id"),CONSTRAINT "fk_book_authorscard_book" FOREIGN KEY ("book_id") REFERENCES "books"("id")) [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

UPD 2 : I decided to make a Migrator().DropTable(). That's kinda worked, and all Errors have gone. But still I get "authorscard": null as a response.

By reading the release note of Gorm v2 ( https://gorm.io/docs/v2_release_note.html ), I think that you are trying to use v2 feature with an old version (<v2). Try to use Gorm latest version.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM