所以我有两个表是零对多关系(每个File
最多可以有1个User
)。
type User struct {
gorm.Model
}
以及
type File struct {
gorm.Model
UserID int `gorm:"default:null"`
User User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;foreignKey:UserID"`
}
现在,在MySQL中(SQLite不会出现这个问题),如果没有创建用户,并且我使用空用户更新文件,则会收到以下错误:
Error 1452: Cannot add or update a child row: a foreign key constraint fails (`DB`.`files`, CONSTRAINT `fk_files_creator` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE)
UPDATE `files` SET `user_id`=0,`deleted_at`=NULL WHERE `id` = 5
这是因为它试图将“0”添加为user_id
,而实际上它应该是NULL
。UPDATE
filesSET
user_id=NULL,
deleted_at=NULL WHERE
id= 5
我设法修复了使用default:null
创建的问题,但是有没有什么想法也可以用于更新?谢谢!
1条答案
按热度按时间0qx6xfy61#
您可以将指针(
*
)用于可空值:实现零对多关系需要类似于
list
s的东西。