【发布时间】:2022-01-17 16:47:53
【问题描述】:
我正在尝试获取具有许多作者的图书数据。它们之间的关系类型是简单的多对多,数据透视表只包含两个 ID。这是模型,
package model
import "gorm.io/gorm"
type Author struct {
gorm.Model
ID uint `gorm:"primaryKey; autoIncrement" json:"id"`
Name string `gorm:"Not Null" json:"name"`
Book []*Book `gorm:"many2many:trx_book_author;" json:"books"`
}
func (author *Author) TableName() string {
return "tbl_authors"
}
package model
import "gorm.io/gorm"
type Book struct {
gorm.Model
ID uint `gorm:"primaryKey; autoIncrement" json:"id"`
Title string `gorm:"Not Null" json:"title"`
Description string `json:"description"`
PageNumber int `gorm:"Not Null" json:"page_number"`
Author []*Author `gorm:"many2many:trx_book_author;" json:"authors"`
}
func (book *Book) TableName() string {
return "tbl_books"
}
这就是我获取数据的方式,
func (bookRepository *BookRepository) GetAll() []model.Book {
var books []model.Book
bookRepository.db.Preload("Author").Find(&books)
return books
}
每当我点击 URL 时,我都会得到一堆我想要的数据,但我想在作者上选择 only 'name' 列。 我已经尝试过这个解决方案,但它不起作用
func (bookRepository *BookRepository) GetAll() []model.Book {
var books []model.Book
bookRepository.db.Preload("Author", func(tx *gorm.DB) *gorm.DB {
return tx.Select("name")
}).Find(&books)
return books
}
有什么想法吗?
编辑 1: 这是使用 tx.Select("name") 或 ("Name") 时产生的错误
failed to assign association &model.Author{Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}, ID:0x0, Name:"dowjqdiq", Book:[]*model.Book(nil)}, make sure foreign fields exists; failed to assign association &model.Author{Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}, ID:0x0, Name:"ddqw", Book:[]*model.Book(nil)}, make sure foreign fields exists; failed to assign association &model.Author{Model:gorm.Model{ID:0x0, CreatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), UpdatedAt:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletedAt:gorm.DeletedAt{Time:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), Valid:false}}, ID:0x0, Name:"vevebe", Book:[]*model.Book(nil)}, make sure foreign fields exists
[24.020ms] [rows:5] SELECT * FROM `tbl_books` WHERE `tbl_books`.`deleted_at` IS NULL
【问题讨论】:
-
试试
tx.Select("Name")。 -
@EminLaletovic 不起作用,错误与使用“名称”相同,我将添加错误
-
创建新的结构来保存它,因为只要你使用带有预加载的 model.Book,你仍然会得到空值的信息。
标签: go grails-orm