BookData我正在尝试根据非主键的字段检索作者的信息。您可以在下面看到我的表AuthorId中的BookData内容,我试图根据该信息获取作者AuthorId,即使它不是主键。GORM 似乎不支持这种类型的连接,有办法做到这一点吗?
您还可以在下面看到我能够正确获取信息,PublisherProperty因为它的外键是BookData的主键。我只是想知道如果它不是主键该怎么做。提前致谢!
type BookData struct {
Id string `gorm:"primary_key;column:book_id"`
AuthorId string `gorm:"column:author_id"`
Author AuthorData `gorm:"foreignkey:AuthorId"`
PublisherProperty []PublisherProperty `gorm:"foreignkey:Id"`
}
type AuthorData struct {
Id string `gorm:"primary_key;column:author_id"`
Name string `gorm:"column:author_name"`
}
type PublisherProperty struct {
Id string `gorm:"primary_key;column:book_id"`
PublisherId string `gorm:"primary_key;column:publisher_id"`
PublisherTxt string `gorm:"column:publisher_txt"`
}
Run Code Online (Sandbox Code Playgroud)
小智 0
ForeignKey您可以使用and关键字References。更多用例可以参考GORM官方文档
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type BookData struct {
Id string `gorm:"primary_key;column:book_id"`
AuthorId string `gorm:"column:author_id"`
Author AuthorData `gorm:"ForeignKey:Id;References:AuthorId"`
PublisherProperty []PublisherProperty `gorm:"ForeignKey:Id"`
}
type AuthorData struct {
Id string `gorm:"primary_key;column:author_id"`
Name string `gorm:"column:author_name"`
}
type PublisherProperty struct {
Id string `gorm:"primary_key;column:book_id"`
PublisherId string `gorm:"primary_key;column:publisher_id"`
PublisherTxt string `gorm:"column:publisher_txt"`
}
var db *gorm.DB
func init() {
dsn := "user:pass@tcp(127.0.0.1:3306)/temp?charset=utf8mb4&parseTime=True&loc=Local"
var err error
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
panic(err)
}
}
func main() {
var books []BookData
err := db.Preload("Author").Preload("PublisherProperty").
Find(&books).Limit(10).Error
if err != nil {
fmt.Println(err)
return
}
fmt.Println(books)
// output:
// [{1 1 {1 author1} [{1 1 } {1 2 }]} {2 1 {1 author1} []}]
}
Run Code Online (Sandbox Code Playgroud)