英文:
GORM CreateInBatches with Embedded Struct Error
问题
我有以下的结构体(为了可读性而截断):
type Schedule struct {
ID int
UserId int
User User `gorm:"embedded;foreignKey:UserId;references:UserId"`
}
type User struct {
ID int
UserId int
IsActive bool
}
我正在尝试对Schedule结构体(作为[]Schedule)执行CreateInBatches操作。但是当我这样做时,插入查询也会尝试插入User结构体的值。
以下是部分插入代码示例:
err := db.Transaction(func(tx *gorm.DB) error {
if err := tx.CreateInBatches(&schedules, len(schedules)).Error; err != nil {
return err // 回滚
}
}
为了完整起见,这是错误信息:
Error Inserting Schedule Batch: Error 1054: Unknown column 'is_active' in 'field list'
有没有标签或其他方法可以在插入查询中省略User结构体?当我输出查询时,它显示为:
INSERT INTO schedule (schedule columns..., [additional user struct columns])
我还尝试了文档中的字段权限标签这里的方法。
英文:
I have the following struct (truncated for readability)
type Schedule struct {
ID int
UserId int
User User `gorm:"embedded;foreignKey:UserId;references:UserId"`
}
And then my User struct (again, truncated for readability):
type User struct {
ID int
UserId int
IsActive bool
}
I'm attempting a CreateInBatches on the Schedule struct (as []Schedule). But when I do, the insert query is attempting to also insert the values from the User struct.
Example (partial code) for insertion:
err := db.Transaction(func(tx *gorm.DB) error {
if err := tx.CreateInBatches(&schedules, len(schedules)).Error; err != nil {
return err //Rollback
}
}
For completion sake, here is the error:
> Error Inserting Schedule Batch: Error 1054: Unknown column 'is_active'
> in 'field list'
Is there a tag or anything that I can do to omit the User struct from the insert query? When I output the query, it is showing the
INSERT INTO schedule (schedule columns..., [additional user struct columns])
I've also tried the field permission tags per the documentation here
答案1
得分: 1
问题在于你在Schedule结构体内部使用了embedded标签来表示User。当你将其移除后,它应该按预期工作。你可以在文档中了解更多信息。
所以你的Schedule结构体应该像这样:
type Schedule struct {
ID int
UserId int
User User `gorm:"foreignKey:UserId;references:UserId"`
}
请注意,我已经将代码部分翻译为中文,如果你还有其他问题,请继续提问。
英文:
Issue is that you are using embedded tag for User inside Schedule struct. It should work as expected when you remove it. You can read about it in docs
So your Schedule struct should look like this:
type Schedule struct {
ID int
UserId int
User User `gorm:"foreignKey:UserId;references:UserId"`
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论