【发布时间】:2026-01-16 16:00:02
【问题描述】:
db.Model 和 db.Table 查询在 go-gorm 中的区别是什么。
我发现的一个区别是,在使用 db.Table().Updates() 时,它不会自行更新 updated_at 字段,而在使用 db.Model 时它会更新。
不知道是bug还是预期的方式,还有其他区别吗?
【问题讨论】:
db.Model 和 db.Table 查询在 go-gorm 中的区别是什么。
我发现的一个区别是,在使用 db.Table().Updates() 时,它不会自行更新 updated_at 字段,而在使用 db.Model 时它会更新。
不知道是bug还是预期的方式,还有其他区别吗?
【问题讨论】:
db.Model是普通的做事方式。它允许您告诉 gorm 此操作与哪个模型结构相关。它并不总是需要,例如具有正确结构类型的简单 Find 将自动推断模型。
db.Table 允许您与可能没有模型结构的表进行交互,或者为给定的操作覆盖表。它级别较低且不太方便,因为它需要代码知道表名,而在普通 ORM 代码中,您希望从模型名自动派生该表名。
如果您看到 Table().Updates() 没有设置 updated_at 列,您可能需要确保您运行的是最新版本的 gorm。另外,您是使用模型结构实例还是使用地图调用更新? (使用地图不太可能设置 updated_at)。
【讨论】: