为什么要在更新关联时创建新行



我遵循文档代码相同的结构并迁移

这是我的模型

type User struct {
gorm.Model
AddressID uint           ``
Address   UserAddress    `gorm:"references:ID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL"`
}
type UserAddress struct {
gorm.Model
Address   string         `gorm:"type:varchar(50);notNull"`
}

文档在迁移和创建数据时工作正常

db.AutoMigrate(&UserAddress{})
db.AutoMigrate(&User{})

但是当我尝试更新数据时使用关联

user := &User{
ID:        1,
AddressID: 1,
Address: UserAddress{
Address: "new address",
},
}
db.Session(&gorm.Session{FullSaveAssociations: true}).Updates(&user)

文档说:

如果你想更新关联的数据,你应该使用fullsaveasassociations模式:

则仍然创建一个新的地址数据并更新user.address_id

INSERT INTO `user_address` (`address`,`created_at`,`updated_at`,`deleted_at`) VALUES ('changed','2021-08-13 14:07:39.149','2021-08-13 14:07:39.149',NULL) ON DUPLICATE KEY UPDATE `address`=VALUES(`address`),`created_at`=VALUES(`created_at`),`updated_at`=VALUES(`updated_at`),`deleted_at`=VALUES(`deleted_at`)

我在这里遗漏了什么,或者它根本不工作?

您没有为Address提供唯一的id。它用自动增量ID创建新的地址记录。并更新与其关联的ID值。

user := &User{
ID:        1,
AddressID: 1,
Address: UserAddress{
ID: 1,
Address: "new address",
},
}

最新更新