Back to Gorm Io

Настройки GORM

pages/ru_RU/docs/gorm_config.md

latest4.6 KB
Original Source

GORM предоставляет конфигурацию, которую можно использовать во время инициализации

go
type Config struct {
  SkipDefaultTransaction   bool
  NamingStrategy           schema.Namer
  Logger                   logger.Interface
  NowFunc                  func() time.Time
  DryRun                   bool
  PrepareStmt              bool
  DisableNestedTransaction bool
  AllowGlobalUpdate        bool
  DisableAutomaticPing     bool
  DisableForeignKeyConstraintWhenMigrating bool
}

SkipDefaultTransaction

GORM выполняет операции записи (создания/обновления/удаления) внутри транзакции, чтобы обеспечить целостность данных, вы можете отключить транзакции в процессе инициализации, если они не требуются

go
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  SkipDefaultTransaction: true,
})

<span id="naming_strategy">NamingStrategy</span>

GORM позволяет пользователям изменять преобразование имен, переопределяя стандартный NamingStrategy, который должен реализовывать интерфейс Namer

go
type Namer interface {
    TableName(table string) string
    SchemaName(table string) string
    ColumnName(table, column string) string
    JoinTableName(table string) string
    RelationshipFKName(Relationship) string
    CheckerName(table, column string) string
    IndexName(table, column string) string
}

По умолчанию NamingStrategy также предоставляет некоторые опции, таким образом:

go
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  NamingStrategy: schema.NamingStrategy{
    TablePrefix: "t_",   // table name prefix, table for `User` would be `t_users`
    SingularTable: true, // use singular table name, table for `User` would be `user` with this option enabled
    NoLowerCase: true, // skip the snake_casing of names
    NameReplacer: strings.NewReplacer("CID", "Cid"), // use name replacer to change struct/field name before convert it to db name
  },
})

Logger

Разрешены изменения логирования по умолчанию в GORM, переопределяя эту опцию, смотрите Logger для получения более подробной информации

<span id="now_func">NowFunc</span>

Изменить функцию, используемую при создании новой отметки времени

go
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  NowFunc: func() time.Time {
    return time.Now().Local()
  },
})

DryRun

Генерировать SQL без выполнения, может быть использован для подготовки или тестирования SQL, смотрите Сессии для подробностей

go
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DryRun: false,
})

PrepareStmt

PreparedStmt (подготовка stmt) создает подготовленную операцию при выполнении любого SQL и кэширует ее для ускорения будущих запросов, смотрите Сессии для подробностей

go
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  PrepareStmt: false,
})

DisableNestedTransaction

When using Transaction method inside a db transaction, GORM will use SavePoint(savedPointName), RollbackTo(savedPointName) to give you the nested transaction support, you could disable it by using the DisableNestedTransaction option, refer Session for details

AllowGlobalUpdate

Enable global update/delete, refer Session for details

DisableAutomaticPing

GORM automatically ping database after initialized to check database availability, disable it by setting it to true

go
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DisableAutomaticPing: true,
})

DisableForeignKeyConstraintWhenMigrating

GORM creates database foreign key constraints automatically when AutoMigrate or CreateTable, disable this by setting it to true, refer Migration for details

go
db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{
  DisableForeignKeyConstraintWhenMigrating: true,
})