Files
sundynix-go/initialize/internal/gorm.go
T

57 lines
1.8 KiB
Go

package internal
import (
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"sundynix-go/config"
"sundynix-go/global"
"time"
)
var Gorm = new(_gorm)
type _gorm struct{}
// Config 函数用于根据数据库类型和配置生成 GORM 的配置对象
// 该函数会根据全局配置中的数据库类型选择相应的通用配置,并返回一个配置好的 *gorm.Config 对象。
//
// 参数:
// - prefix: 表名前缀,用于在生成表名时添加到表名前。
// - singular: 是否禁用复数表名,true 表示禁用复数表名,false 表示使用复数表名。
//
// 返回值:
// - *gorm.Config: 配置好的 GORM 配置对象,包含日志、命名策略等配置。
func (g *_gorm) Config(prefix string, singular bool) *gorm.Config {
// 根据全局配置中的数据库类型选择相应的通用配置
var general config.GeneralDB
switch global.Config.System.DbType {
case "mysql":
general = global.Config.Mysql.GeneralDB
case "pgsql":
general = global.Config.Pgsql.GeneralDB
case "sqlite":
general = global.Config.Sqlite.GeneralDB
default:
// 默认使用 MySQL 的通用配置
general = global.Config.Mysql.GeneralDB
}
// 返回配置好的 GORM 配置对象
return &gorm.Config{
// 配置日志记录器,使用自定义的日志写入器,并设置慢查询阈值、日志级别和颜色输出
Logger: logger.New(NewWriter(general), logger.Config{
SlowThreshold: 200 * time.Millisecond,
LogLevel: general.LogLevel(),
Colorful: true,
}),
// 配置命名策略,设置表前缀和是否禁用复数表名
NamingStrategy: schema.NamingStrategy{
TablePrefix: prefix, // 表前缀
SingularTable: singular, // 禁用复数表名
},
// 禁用自动创建外键约束
DisableForeignKeyConstraintWhenMigrating: true,
}
}