英文:
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"`
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论