错误 1452:无法添加或更新子行(GOLANG 和 MYSQL)



im a golang intern .我在 gorm 中使用外键时遇到问题。我尝试使用 gorm 编写 crud operation.im,使用外键时出现错误:错误 1452:无法添加或更新子行。

package migrations
import "gorm.io/gorm"
type Category struct {
gorm.Model
ID    uint
Title string `gorm:"type:varchar(255)"`
Sort  int
}
package migrations
import "gorm.io/gorm"
type Contents struct {
gorm.Model
ID            uint
CategoryModel Category `gorm:"foreignKey:cat_id"`
CatId         uint
Title         string `gorm:"type:varchar(255)"`
Content       string `gorm:"content,type:varchar(255)"`
}

我得到了这个错误:

2022/11/

23 14:31:33/home/channelead/Documents/blog-service-go/internal/activities/blog/Content/action.go:26 错误 1452:无法添加或更新子行:外键约束失败

(service-blog-go.contents、约束fk_contents_category_model外键(cat_id)引用categories(id)) [3.247毫秒] [行:0]插入contents(created_atupdated_atdeleted_atcat_idtitlecontent) 值 ('2022-11-23 14:31:33.972','2022-11-23 14:31:33.972',NULL,0,'霍达亚 csacas DG','test ')

请注意插入查询。您0作为引用表CategoryID 的cat_id。但是Category表中没有带有0ID 的条目。另一个重要的事实是,如果您使用gorm.Model,则不需要显式ID,因为它内部有一个ID字段。并且 类别模型 字段应重命名为类别。这些是 gorm 默认值,但您可以配置这些内容。请阅读文档。这是工作代码GITHUB LINK。您可以克隆存储库并运行。

package storage
import (
"fmt"
"log"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type Category struct {
gorm.Model
Title string `gorm:"type:varchar(255)"`
Sort  int
}
type Contents struct {
gorm.Model
Category   Category
CategoryID uint
Title      string `gorm:"type:varchar(255)"`
Content    string `gorm:"type:varchar(255)"`
}
func GormTest3() {
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
log.Fatal("could not open database")
}
err = db.AutoMigrate(&Contents{}, &Category{})
if err != nil {
log.Fatal("could not migrate database")
}
createTestData3(db)
fetchData3(db)
}
func createTestData3(db *gorm.DB) {
category := Category{
Title: "ABC",
Sort:  1,
}
err := db.Create(&category).Error
if err != nil {
fmt.Println("failed to create user data")
}
content := Contents{
CategoryID: category.ID,
Title:      "Good Content Title",
Content:    "Good Content",
}
err = db.Create(&content).Error
if err != nil {
fmt.Println("failed to create user data")
}
}
func fetchData3(db *gorm.DB) {
var cts []Contents
if err := db.Find(&cts).Error; err != nil {
fmt.Println("failed to load post")
}
fmt.Println(cts)
}

参考: 戈尔姆有一个

最新更新