# #go #go-gorm
Вопрос:
Я пытаюсь создать реляционную базу данных с помощью gORM, и у меня проблема с методом «принадлежит«, из-за которой я не могу приступить к работе.
Я ожидаю увидеть бронирование с таблицей, с которой оно связано, но в бронировании просто отображается таблица с нулевыми значениями. и идентификатор таблицы, на который он должен ссылаться, также равен нулю.
Я создал небольшой тест, который создает некоторые данные и выводит результаты в формате json.
package main import ( "encoding/json" "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type User struct { gorm.Model Username string Password string Bookings []Booking `gorm:"polymorphic:Owner;"` } type Booking struct { gorm.Model TableID *int Table Table OwnerID uint Time int OwnerType string } type Table struct { gorm.Model Number int Price int } func DatabaseConnection() *gorm.DB { db, err := gorm.Open(sqlite.Open("./test.db"), amp;gorm.Config{}) if err != nil { panic(err) } db.AutoMigrate(amp;Booking{}) db.AutoMigrate(amp;Table{}) db.AutoMigrate(amp;User{}) return db } func main() { fmt.Println("creating stuff..") createStuff() fmt.Println("checking table..") checkTable() fmt.Println("checking booking..") checkBooking() fmt.Println("checking user..") checkUser() } func checkTable() { db := DatabaseConnection() var table Table db.First(amp;table) u, _ := json.Marshal(amp;table) fmt.Println(string(u)) } func checkUser() { db := DatabaseConnection() var user User db.First(amp;user) db.Preload("Bookings.Table").Preload("Bookings").First(amp;user) u, _ := json.Marshal(amp;user) fmt.Println(string(u)) } func checkBooking() { db := DatabaseConnection() var booking Booking db.Preload("Table").First(amp;booking) u, _ := json.Marshal(amp;booking) fmt.Println(string(u)) } func createStuff() { db := DatabaseConnection() tables := []Table{ {Number: 1, Price: 100}, {Number: 2, Price: 100}, {Number: 3, Price: 100}, {Number: 4, Price: 100}, {Number: 5, Price: 100}, {Number: 6, Price: 100}, {Number: 7, Price: 100}, } user := User{ Username: "martin", Password: "secret", } db.Create(amp;user) db.Create(amp;tables) booking := Booking{Time: 1234} db.Model(amp;tables[0]).Association("Table").Append( amp;booking, ) db.Model(amp;user).Association("Bookings").Append( amp;booking, ) }
Я получаю следующие результаты из своего теста:
checking table.. { "ID": 1, "CreatedAt": "2021-12-06T14:56:27.169847346 01:00", "UpdatedAt": "2021-12-06T14:56:27.169847346 01:00", "DeletedAt": null, "Number": 1, "Price": 100 } checking booking.. { "ID": 1, "CreatedAt": "2021-12-06T14:56:27.173323491 01:00", "UpdatedAt": "2021-12-06T14:56:27.173323491 01:00", "DeletedAt": null, "TableID": null, "Table": { "ID": 0, "CreatedAt": "0001-01-01T00:00:00Z", "UpdatedAt": "0001-01-01T00:00:00Z", "DeletedAt": null, "Number": 0, "Price": 0 }, "OwnerID": 1, "Time": 1234, "OwnerType": "users" } checking user.. { "ID": 1, "CreatedAt": "2021-12-06T14:56:27.166274122 01:00", "UpdatedAt": "2021-12-06T14:56:27.17309057 01:00", "DeletedAt": null, "Username": "martin", "Password": "secret", "Bookings": [ { "ID": 1, "CreatedAt": "2021-12-06T14:56:27.173323491 01:00", "UpdatedAt": "2021-12-06T14:56:27.173323491 01:00", "DeletedAt": null, "TableID": null, "Table": { "ID": 0, "CreatedAt": "0001-01-01T00:00:00Z", "UpdatedAt": "0001-01-01T00:00:00Z", "DeletedAt": null, "Number": 0, "Price": 0 }, "OwnerID": 1, "Time": 1234, "OwnerType": "users" } ] }