gorm postgres:自定义类型主键开启自增
在使用 gorm 对 postgres 数据库进行操作时,自定义类型的主键无法自动设置自增。本文详细阐述该问题的原因及解决方案。
问题原因:
自定义类型对应的主键字段在表自动迁移时无法被识别为自增。这是因为 gorm 的默认行为是根据字段类型来判断是否自增(例如,bigint 类型默认设置为自增)。而自定义类型并不属于 gorm 支持的默认类型。
解决方案:
通过修改 gormdbdatatype 方法,可以指定自定义类型对应字段的数据类型以及自增属性。在代码中,只需根据不同数据库(例如 postgres)判断字段是否自增,如果是自增,则返回 berial 类型。
以下为修改后的代码:
func (bigint BigInt) GormDBDataType(db *gorm.DB, field *schema.Field) string { // 根据不同的数据库驱动返回不同的数据类型 switch db.Dialector.Name() { case "mysql", "sqlite": return "bigint" case "postgres": if field.AutoIncrement { return "bigserial" } return "bigint" } return "bigint" }
登录后复制
注意事项:
自定义类型需要实现 gormdbdatatype 接口。在表创建时,gorm 会直接使用 gormdbdatatype 返回的类型来创建表的字段。
以上就是Gorm Postgres:如何实现自定义类型主键的自增?的详细内容,更多请关注php中文网其它相关文章!