Documentation ¶
Index ¶
- Variables
- func Expr(expr string, args ...interface{}) clause.Expr
- func Scan(rows Rows, db *DB, mode ScanMode)
- type Association
- func (association *Association) Append(values ...interface{}) error
- func (association *Association) Clear() error
- func (association *Association) Count() (count int64)
- func (association *Association) Delete(values ...interface{}) error
- func (association *Association) Find(out interface{}, conds ...interface{}) error
- func (association *Association) Replace(values ...interface{}) error
- func (association *Association) Unscoped() *Association
- type ColumnType
- type Config
- type ConnPool
- type ConnPoolBeginner
- type DB
- func (db *DB) AddError(err error) error
- func (db *DB) Alias(value string) (tx *DB)
- func (db *DB) Assign(attrs ...interface{}) (tx *DB)
- func (db *DB) Association(column string) *Association
- func (db *DB) Attrs(attrs ...interface{}) (tx *DB)
- func (db *DB) AutoMigrate(dst ...interface{}) error
- func (db *DB) Begin(opts ...*sql.TxOptions) *DB
- func (db *DB) Builder() *SqlBuilder
- func (db *DB) Callback() *callbacks
- func (db *DB) Clauses(conds ...clause.Expression) (tx *DB)
- func (db *DB) Commit() *DB
- func (db *DB) Connection(fc func(tx *DB) error) (err error)
- func (db *DB) Count(count *int64) (tx *DB)
- func (db *DB) Create(value interface{}) (tx *DB)
- func (db *DB) CreateInBatches(value interface{}, batchSize int) (tx *DB)
- func (db *DB) DB() (*sql.DB, error)
- func (db *DB) DDelete(sqlId string, param ...any) (tx *DB)
- func (db *DB) DOffset(page, limit int) (tx *DB)
- func (db *DB) DQuery(sqlId string, param ...any) (tx *DB)
- func (db *DB) DUpdate(sqlId string, param ...any) (tx *DB)
- func (db *DB) Debug() (tx *DB)
- func (db *DB) Delete(value interface{}, conds ...interface{}) (tx *DB)
- func (db *DB) Distinct(args ...interface{}) (tx *DB)
- func (db *DB) Exec(sql string, values ...interface{}) (tx *DB)
- func (db *DB) Find(dest interface{}, conds ...interface{}) (tx *DB)
- func (db *DB) FindInBatches(dest interface{}, batchSize int, fc func(tx *DB, batch int) error) *DB
- func (db *DB) First(dest interface{}, conds ...interface{}) (tx *DB)
- func (db *DB) FirstOrCreate(dest interface{}, conds ...interface{}) (tx *DB)
- func (db *DB) FirstOrInit(dest interface{}, conds ...interface{}) (tx *DB)
- func (db *DB) Get(key string) (interface{}, bool)
- func (db *DB) Group(name string) (tx *DB)
- func (db *DB) Having(query interface{}, args ...interface{}) (tx *DB)
- func (db *DB) InnerJoins(query string, args ...interface{}) (tx *DB)
- func (db *DB) InstanceGet(key string) (interface{}, bool)
- func (db *DB) InstanceSet(key string, value interface{}) *DB
- func (db *DB) Joins(query string, args ...interface{}) (tx *DB)
- func (db *DB) Last(dest interface{}, conds ...interface{}) (tx *DB)
- func (db *DB) Limit(limit int) (tx *DB)
- func (db *DB) Mappers(name string) (tx *DB)
- func (db *DB) Migrator() Migrator
- func (db *DB) Model(value interface{}) (tx *DB)
- func (db *DB) Namespace(name string) (tx *DB)
- func (db *DB) Not(query interface{}, args ...interface{}) (tx *DB)
- func (db *DB) Offset(offset int) (tx *DB)
- func (db *DB) Omit(columns ...string) (tx *DB)
- func (db *DB) Or(query interface{}, args ...interface{}) (tx *DB)
- func (db *DB) Order(value interface{}) (tx *DB)
- func (db *DB) Pluck(column string, dest interface{}) (tx *DB)
- func (db *DB) Preload(query string, args ...interface{}) (tx *DB)
- func (db *DB) Raw(sql string, values ...interface{}) (tx *DB)
- func (db *DB) Rollback() *DB
- func (db *DB) RollbackTo(name string) *DB
- func (db *DB) Row() *sql.Row
- func (db *DB) Rows() (*sql.Rows, error)
- func (db *DB) Save(value interface{}) (tx *DB)
- func (db *DB) SavePoint(name string) *DB
- func (db *DB) Scan(dest interface{}) (tx *DB)
- func (db *DB) ScanRows(rows *sql.Rows, dest interface{}) error
- func (db *DB) Scopes(funcs ...func(*DB) *DB) (tx *DB)
- func (db *DB) Select(query interface{}, args ...interface{}) (tx *DB)
- func (db *DB) Session(config *Session) *DB
- func (db *DB) Set(key string, value interface{}) *DB
- func (db *DB) SetupJoinTable(model interface{}, field string, joinTable interface{}) error
- func (db *DB) TDelete() (tx *DB)
- func (db *DB) TPage(value any, total *int64) (tx *DB)
- func (db *DB) TSelect(value any) (tx *DB)
- func (db *DB) TUpdate(value any) (tx *DB)
- func (db *DB) Table(name string, args ...interface{}) (tx *DB)
- func (db *DB) Take(dest interface{}, conds ...interface{}) (tx *DB)
- func (db *DB) Template(sqlId string, param ...any) (tx *DB)
- func (db *DB) ToSQL(queryFn func(tx *DB) *DB) string
- func (db *DB) Transaction(fc func(tx *DB) error, opts ...*sql.TxOptions) (err error)
- func (db *DB) Unscoped() (tx *DB)
- func (db *DB) Update(column string, value interface{}) (tx *DB)
- func (db *DB) UpdateColumn(column string, value interface{}) (tx *DB)
- func (db *DB) UpdateColumns(values interface{}) (tx *DB)
- func (db *DB) Updates(values interface{}) (tx *DB)
- func (db *DB) Use(plugin Plugin) error
- func (db *DB) Where(query interface{}, args ...interface{}) (tx *DB)
- func (db *DB) WithContext(ctx context.Context) *DB
- type DeleteDom
- type DeletedAt
- func (DeletedAt) DeleteClauses(f *schema.Field) []clause.Interface
- func (n DeletedAt) MarshalJSON() ([]byte, error)
- func (DeletedAt) QueryClauses(f *schema.Field) []clause.Interface
- func (n *DeletedAt) Scan(value interface{}) error
- func (n *DeletedAt) UnmarshalJSON(b []byte) error
- func (DeletedAt) UpdateClauses(f *schema.Field) []clause.Interface
- func (n DeletedAt) Value() (driver.Value, error)
- type Dialector
- type DynamicItem
- type DynamicModel
- type DynamicNode
- type DynamicType
- type ErrorTranslator
- type GetDBConnector
- type GetDBConnectorWithContext
- type IPage
- type Index
- type InsertDom
- type Migrator
- type Model
- type Option
- type ParamsFilter
- type Plugin
- type PreparedStmtDB
- func (db *PreparedStmtDB) BeginTx(ctx context.Context, opt *sql.TxOptions) (ConnPool, error)
- func (db *PreparedStmtDB) Close()
- func (db *PreparedStmtDB) ExecContext(ctx context.Context, query string, args ...interface{}) (result sql.Result, err error)
- func (db *PreparedStmtDB) GetDBConn() (*sql.DB, error)
- func (db *PreparedStmtDB) QueryContext(ctx context.Context, query string, args ...interface{}) (rows *sql.Rows, err error)
- func (db *PreparedStmtDB) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row
- func (db *PreparedStmtDB) Reset()
- type PreparedStmtTX
- func (tx *PreparedStmtTX) Commit() error
- func (tx *PreparedStmtTX) ExecContext(ctx context.Context, query string, args ...interface{}) (result sql.Result, err error)
- func (tx *PreparedStmtTX) QueryContext(ctx context.Context, query string, args ...interface{}) (rows *sql.Rows, err error)
- func (tx *PreparedStmtTX) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row
- func (tx *PreparedStmtTX) Rollback() error
- type Rows
- type SavePointerDialectorInterface
- type ScanMode
- type SelectDom
- type Session
- type SoftDeleteDeleteClause
- type SoftDeleteQueryClause
- type SoftDeleteUpdateClause
- type SqlBuilder
- func (s *SqlBuilder) DExecute(value any) (tx *DB)
- func (s *SqlBuilder) Delete() *SqlBuilder
- func (s *SqlBuilder) From(tableName string, alias ...string) *SqlBuilder
- func (s *SqlBuilder) FromQuery(handler func(query *SqlBuilder), alias string) *SqlBuilder
- func (s *SqlBuilder) GroupBy(fieldName string) *SqlBuilder
- func (s *SqlBuilder) IJoin(tableName, on string) *SqlBuilder
- func (s *SqlBuilder) LJoin(tableName, on string) *SqlBuilder
- func (s *SqlBuilder) Limit(limit int64) *SqlBuilder
- func (s *SqlBuilder) Offset(offset int64) *SqlBuilder
- func (s *SqlBuilder) OrderBy(query ...*SqlToken) *SqlBuilder
- func (s *SqlBuilder) QExecute(value any) (tx *DB)
- func (s *SqlBuilder) RJoin(tableName, on string) *SqlBuilder
- func (s *SqlBuilder) Select(fields ...*SqlToken) *SqlBuilder
- func (s *SqlBuilder) Set(fields ...*SqlToken) *SqlBuilder
- func (s *SqlBuilder) Table(tableName string, alias ...string) *SqlBuilder
- func (s *SqlBuilder) ToSql() (*DB, string, []any)
- func (s *SqlBuilder) UExecute() (tx *DB)
- func (s *SqlBuilder) Union(query func(builder *SqlBuilder)) *SqlBuilder
- func (s *SqlBuilder) UnionAll(query func(builder *SqlBuilder)) *SqlBuilder
- func (s *SqlBuilder) Update() *SqlBuilder
- func (s *SqlBuilder) Where(query ...*SqlToken) *SqlBuilder
- func (s *SqlBuilder) WhereOr(query ...*SqlToken) *SqlBuilder
- type SqlToken
- func And(query ...SqlToken) *SqlToken
- func Asc(field string) *SqlToken
- func Between(field string, value1, value2 any) *SqlToken
- func Count(name string) *SqlToken
- func Desc(field string) *SqlToken
- func Eq(field string, value any) *SqlToken
- func Field(name string, alias ...string) *SqlToken
- func Gt(field string, value any) *SqlToken
- func Gte(field string, value any) *SqlToken
- func In(field string, values ...any) *SqlToken
- func LLike(field string, value string) *SqlToken
- func Like(field string, value string) *SqlToken
- func Lt(field string, value any) *SqlToken
- func Lte(field string, value any) *SqlToken
- func Max(name string) *SqlToken
- func Min(name string) *SqlToken
- func NotIn(field string, values ...any) *SqlToken
- func NotNull(field string) *SqlToken
- func Nq(field string, value any) *SqlToken
- func Null(field string) *SqlToken
- func Or(query ...*SqlToken) *SqlToken
- func RLike(field string, value string) *SqlToken
- func SetField(fieldName string, value any) *SqlToken
- type Statement
- func (stmt *Statement) AddClause(v clause.Interface)
- func (stmt *Statement) AddClauseIfNotExists(v clause.Interface)
- func (stmt *Statement) AddVar(writer clause.Writer, vars ...interface{})
- func (stmt *Statement) Build(clauses ...string)
- func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []clause.Expression
- func (stmt *Statement) Changed(fields ...string) bool
- func (stmt *Statement) Parse(value interface{}) (err error)
- func (stmt *Statement) ParseWithSpecialTableName(value interface{}, specialTableName string) (err error)
- func (stmt *Statement) Quote(field interface{}) string
- func (stmt *Statement) QuoteTo(writer clause.Writer, field interface{})
- func (stmt *Statement) SelectAndOmitColumns(requireCreate, requireUpdate bool) (map[string]bool, bool)
- func (stmt *Statement) SetColumn(name string, value interface{}, fromCallbacks ...bool)
- func (stmt *Statement) WriteByte(c byte) error
- func (stmt *Statement) WriteQuoted(value interface{})
- func (stmt *Statement) WriteString(str string) (int, error)
- type StatementModifier
- type Stmt
- type TableType
- type Tx
- type TxBeginner
- type TxCommitter
- type UpdateDom
- type Valuer
- type ViewOption
- type XmlRootDom
Constants ¶
This section is empty.
Variables ¶
var ( // ErrRecordNotFound record not found error ErrRecordNotFound = logger.ErrRecordNotFound // ErrInvalidTransaction invalid transaction when you are trying to `Commit` or `Rollback` ErrInvalidTransaction = errors.New("invalid transaction") // ErrNotImplemented not implemented ErrNotImplemented = errors.New("not implemented") // ErrMissingWhereClause missing where clause ErrMissingWhereClause = errors.New("WHERE conditions required") // ErrUnsupportedRelation unsupported relations ErrUnsupportedRelation = errors.New("unsupported relations") // ErrPrimaryKeyRequired primary keys required ErrPrimaryKeyRequired = errors.New("primary key required") // ErrModelValueRequired model value required ErrModelValueRequired = errors.New("model value required") // ErrModelAccessibleFieldsRequired model accessible fields required ErrModelAccessibleFieldsRequired = errors.New("model accessible fields required") // ErrSubQueryRequired sub query required ErrSubQueryRequired = errors.New("sub query required") // ErrInvalidData unsupported data ErrInvalidData = errors.New("unsupported data") // ErrUnsupportedDriver unsupported driver ErrUnsupportedDriver = errors.New("unsupported driver") // ErrRegistered registered ErrRegistered = errors.New("registered") // ErrInvalidField invalid field ErrInvalidField = errors.New("invalid field") // ErrEmptySlice empty slice found ErrEmptySlice = errors.New("empty slice found") // ErrDryRunModeUnsupported dry run mode unsupported ErrDryRunModeUnsupported = errors.New("dry run mode unsupported") // ErrInvalidDB invalid db ErrInvalidDB = errors.New("invalid db") // ErrInvalidValue invalid value ErrInvalidValue = errors.New("invalid value, should be pointer to struct or slice") // ErrInvalidValueOfLength invalid values do not match length ErrInvalidValueOfLength = errors.New("invalid association values, length doesn't match") // ErrPreloadNotAllowed preload is not allowed when count is used ErrPreloadNotAllowed = errors.New("preload is not allowed when count is used") // ErrDuplicatedKey occurs when there is a unique key constraint violation ErrDuplicatedKey = errors.New("duplicated key not allowed") // ErrForeignKeyViolated occurs when there is a foreign key constraint violation ErrForeignKeyViolated = errors.New("violates foreign key constraint") )
Functions ¶
Types ¶
type Association ¶
type Association struct { DB *DB Relationship *schema.Relationship Unscope bool Error error }
Association Mode contains some helper methods to handle relationship things easily.
func (*Association) Append ¶
func (association *Association) Append(values ...interface{}) error
func (*Association) Clear ¶
func (association *Association) Clear() error
func (*Association) Count ¶
func (association *Association) Count() (count int64)
func (*Association) Delete ¶
func (association *Association) Delete(values ...interface{}) error
func (*Association) Find ¶
func (association *Association) Find(out interface{}, conds ...interface{}) error
func (*Association) Replace ¶
func (association *Association) Replace(values ...interface{}) error
func (*Association) Unscoped ¶
func (association *Association) Unscoped() *Association
type ColumnType ¶
type ColumnType interface { Name() string DatabaseTypeName() string // varchar ColumnType() (columnType string, ok bool) // varchar(64) PrimaryKey() (isPrimaryKey bool, ok bool) AutoIncrement() (isAutoIncrement bool, ok bool) Length() (length int64, ok bool) DecimalSize() (precision int64, scale int64, ok bool) Nullable() (nullable bool, ok bool) Unique() (unique bool, ok bool) ScanType() reflect.Type Comment() (value string, ok bool) DefaultValue() (value string, ok bool) }
ColumnType column type interface
type Config ¶
type Config struct { // GORM perform single create, update, delete operations in transactions by default to ensure database data integrity // You can disable it by setting `SkipDefaultTransaction` to true SkipDefaultTransaction bool // NamingStrategy tables, columns naming strategy NamingStrategy schema.Namer // FullSaveAssociations full save associations FullSaveAssociations bool // Logger Logger logger.Interface Logger2 logger2.ILogger // NowFunc the function to be used when creating a new timestamp NowFunc func() time.Time // DryRun generate sql without execute DryRun bool // PrepareStmt executes the given query in cached statement PrepareStmt bool // DisableAutomaticPing DisableAutomaticPing bool // DisableForeignKeyConstraintWhenMigrating DisableForeignKeyConstraintWhenMigrating bool // IgnoreRelationshipsWhenMigrating IgnoreRelationshipsWhenMigrating bool // DisableNestedTransaction disable nested transaction DisableNestedTransaction bool // AllowGlobalUpdate allow global update AllowGlobalUpdate bool // QueryFields executes the SQL query with all fields of the table QueryFields bool // CreateBatchSize default create batch size CreateBatchSize int // TranslateError enabling error translation TranslateError bool // ClauseBuilders clause builder ClauseBuilders map[string]clause.ClauseBuilder // ConnPool db conn pool ConnPool ConnPool // Dialector database dialector Dialector // Plugins registered plugins Plugins map[string]Plugin MapperFs embed.FS Mapper map[string]*DynamicModel SlowThreshold time.Duration // 慢SQL阈值 IgnoreRecordNotFoundError bool // 是否忽略记录没有找到错误 // contains filtered or unexported fields }
Config GORM config
func (*Config) AfterInitialize ¶
AfterInitialize initialize plugins after db connected
type ConnPool ¶
type ConnPool interface { PrepareContext(ctx context.Context, query string) (*sql.Stmt, error) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row }
ConnPool db conns pool interface
type ConnPoolBeginner ¶
type ConnPoolBeginner interface {
BeginTx(ctx context.Context, opts *sql.TxOptions) (ConnPool, error)
}
ConnPoolBeginner conn pool beginner
type DB ¶
type DB struct { *Config Error error RowsAffected int64 Statement *Statement Mapper map[string]*DynamicModel IsBuilder bool IsTemplate bool // contains filtered or unexported fields }
DB GORM DB definition
func (*DB) Assign ¶
Assign provide attributes used in FirstOrCreate or FirstOrInit
Assign adds attributes even if the record is found. If using FirstOrCreate, this means that records will be updated even if they are found.
// assign an email regardless of if the record is not found db.Where(User{Name: "non_existing"}).Assign(User{Email: "fake@fake.org"}).FirstOrInit(&user) // user -> User{Name: "non_existing", Email: "fake@fake.org"} // assign email regardless of if record is found db.Where(User{Name: "jinzhu"}).Assign(User{Email: "fake@fake.org"}).FirstOrInit(&user) // user -> User{Name: "jinzhu", Age: 20, Email: "fake@fake.org"}
func (*DB) Association ¶
func (db *DB) Association(column string) *Association
func (*DB) Attrs ¶
Attrs provide attributes used in FirstOrCreate or FirstOrInit
Attrs only adds attributes if the record is not found.
// assign an email if the record is not found db.Where(User{Name: "non_existing"}).Attrs(User{Email: "fake@fake.org"}).FirstOrInit(&user) // user -> User{Name: "non_existing", Email: "fake@fake.org"} // assign an email if the record is not found, otherwise ignore provided email db.Where(User{Name: "jinzhu"}).Attrs(User{Email: "fake@fake.org"}).FirstOrInit(&user) // user -> User{Name: "jinzhu", Age: 20}
func (*DB) AutoMigrate ¶
AutoMigrate run auto migration for given models
func (*DB) Clauses ¶
func (db *DB) Clauses(conds ...clause.Expression) (tx *DB)
Clauses Add clauses
This supports both standard clauses (clause.OrderBy, clause.Limit, clause.Where) and more advanced techniques like specifying lock strength and optimizer hints. See the docs for more depth.
// add a simple limit clause db.Clauses(clause.Limit{Limit: 1}).Find(&User{}) // tell the optimizer to use the `idx_user_name` index db.Clauses(hints.UseIndex("idx_user_name")).Find(&User{}) // specify the lock strength to UPDATE db.Clauses(clause.Locking{Strength: "UPDATE"}).Find(&users)
func (*DB) Connection ¶
Connection uses a db connection to execute an arbitrary number of commands in fc. When finished, the connection is returned to the connection pool.
func (*DB) CreateInBatches ¶
CreateInBatches inserts value in batches of batchSize
func (*DB) Delete ¶
Delete deletes value matching given conditions. If value contains primary key it is included in the conditions. If value includes a deleted_at field, then Delete performs a soft delete instead by setting deleted_at with the current time if null.
func (*DB) Distinct ¶
Distinct specify distinct fields that you want querying
// Select distinct names of users db.Distinct("name").Find(&results) // Select distinct name/age pairs from users db.Distinct("name", "age").Find(&results)
func (*DB) FindInBatches ¶
FindInBatches finds all records in batches of batchSize
func (*DB) First ¶
First finds the first record ordered by primary key, matching given conditions conds
func (*DB) FirstOrCreate ¶
FirstOrCreate finds the first matching record, otherwise if not found creates a new instance with given conds. Each conds must be a struct or map.
Using FirstOrCreate in conjunction with Assign will result in an update to the database even if the record exists.
// assign an email if the record is not found result := db.Where(User{Name: "non_existing"}).Attrs(User{Email: "fake@fake.org"}).FirstOrCreate(&user) // user -> User{Name: "non_existing", Email: "fake@fake.org"} // result.RowsAffected -> 1 // assign email regardless of if record is found result := db.Where(User{Name: "jinzhu"}).Assign(User{Email: "fake@fake.org"}).FirstOrCreate(&user) // user -> User{Name: "jinzhu", Age: 20, Email: "fake@fake.org"} // result.RowsAffected -> 1
func (*DB) FirstOrInit ¶
FirstOrInit finds the first matching record, otherwise if not found initializes a new instance with given conds. Each conds must be a struct or map.
FirstOrInit never modifies the database. It is often used with Assign and Attrs.
// assign an email if the record is not found db.Where(User{Name: "non_existing"}).Attrs(User{Email: "fake@fake.org"}).FirstOrInit(&user) // user -> User{Name: "non_existing", Email: "fake@fake.org"} // assign email regardless of if record is found db.Where(User{Name: "jinzhu"}).Assign(User{Email: "fake@fake.org"}).FirstOrInit(&user) // user -> User{Name: "jinzhu", Age: 20, Email: "fake@fake.org"}
func (*DB) Group ¶
Group specify the group method on the find
// Select the sum age of users with given names db.Model(&User{}).Select("name, sum(age) as total").Group("name").Find(&results)
func (*DB) Having ¶
Having specify HAVING conditions for GROUP BY
// Select the sum age of users with name jinzhu db.Model(&User{}).Select("name, sum(age) as total").Group("name").Having("name = ?", "jinzhu").Find(&result)
func (*DB) InnerJoins ¶
InnerJoins specify inner joins conditions db.InnerJoins("Account").Find(&user)
func (*DB) InstanceGet ¶
InstanceGet get value with key from current db instance's context
func (*DB) InstanceSet ¶
InstanceSet store value with key into current db instance's context
func (*DB) Joins ¶
Joins specify Joins conditions
db.Joins("Account").Find(&user) db.Joins("JOIN emails ON emails.user_id = users.id AND emails.email = ?", "jinzhu@example.org").Find(&user) db.Joins("Account", DB.Select("id").Where("user_id = users.id AND name = ?", "someName").Model(&Account{}))
func (*DB) Last ¶
Last finds the last record ordered by primary key, matching given conditions conds
func (*DB) Limit ¶
Limit specify the number of records to be retrieved
Limit conditions can be cancelled by using `Limit(-1)`.
// retrieve 3 users db.Limit(3).Find(&users) // retrieve 3 users into users1, and all users into users2 db.Limit(3).Find(&users1).Limit(-1).Find(&users2)
func (*DB) Model ¶
Model specify the model you would like to run db operations
// update all users's name to `hello` db.Model(&User{}).Update("name", "hello") // if user's primary key is non-blank, will use it as condition, then will only update that user's name to `hello` db.Model(&user).Update("name", "hello")
func (*DB) Not ¶
Not add NOT conditions
Not works similarly to where, and has the same syntax.
// Find the first user with name not equal to jinzhu db.Not("name = ?", "jinzhu").First(&user)
func (*DB) Offset ¶
Offset specify the number of records to skip before starting to return the records
Offset conditions can be cancelled by using `Offset(-1)`.
// select the third user db.Offset(2).First(&user) // select the first user by cancelling an earlier chained offset db.Offset(5).Offset(-1).First(&user)
func (*DB) Or ¶
Or add OR conditions
Or is used to chain together queries with an OR.
// Find the first user with name equal to jinzhu or john db.Where("name = ?", "jinzhu").Or("name = ?", "john").First(&user)
func (*DB) Order ¶
Order specify order when retrieving records from database
db.Order("name DESC") db.Order(clause.OrderByColumn{Column: clause.Column{Name: "name"}, Desc: true})
func (*DB) Pluck ¶
Pluck queries a single column from a model, returning in the slice dest. E.g.:
var ages []int64 db.Model(&users).Pluck("age", &ages)
func (*DB) Preload ¶
Preload preload associations with given conditions
// get all users, and preload all non-cancelled orders db.Preload("Orders", "state NOT IN (?)", "cancelled").Find(&users)
func (*DB) RollbackTo ¶
func (*DB) Save ¶
Save updates value in database. If value doesn't contain a matching primary key, value is inserted.
func (*DB) Scopes ¶
Scopes pass current database connection to arguments `func(DB) DB`, which could be used to add conditions dynamically
func AmountGreaterThan1000(db *gorm.DB) *gorm.DB { return db.Where("amount > ?", 1000) } func OrderStatus(status []string) func (db *gorm.DB) *gorm.DB { return func (db *gorm.DB) *gorm.DB { return db.Scopes(AmountGreaterThan1000).Where("status in (?)", status) } } db.Scopes(AmountGreaterThan1000, OrderStatus([]string{"paid", "shipped"})).Find(&orders)
func (*DB) Select ¶
Select specify fields that you want when querying, creating, updating
Use Select when you only want a subset of the fields. By default, GORM will select all fields. Select accepts both string arguments and arrays.
// Select name and age of user using multiple arguments db.Select("name", "age").Find(&users) // Select name and age of user using an array db.Select([]string{"name", "age"}).Find(&users)
func (*DB) SetupJoinTable ¶
SetupJoinTable setup join table schema
func (*DB) Table ¶
Table specify the table you would like to run db operations
// Get a user db.Table("users").Take(&result)
func (*DB) Take ¶
Take finds the first record returned by the database in no specified order, matching given conditions conds
func (*DB) ToSQL ¶
ToSQL for generate SQL string.
db.ToSQL(func(tx *gorm.DB) *gorm.DB { return tx.Model(&User{}).Where(&User{Name: "foo", Age: 20}) .Limit(10).Offset(5) .Order("name ASC") .First(&User{}) })
func (*DB) Transaction ¶
Transaction start a transaction as a block, return error will rollback, otherwise to commit. Transaction executes an arbitrary number of commands in fc within a transaction. On success the changes are committed; if an error occurs they are rolled back.
func (*DB) Update ¶
Update updates column with value using callbacks. Reference: https://gorm.io/docs/update.html#Update-Changed-Fields
func (*DB) UpdateColumn ¶
func (*DB) UpdateColumns ¶
func (*DB) Updates ¶
Updates updates attributes using callbacks. values must be a struct or map. Reference: https://gorm.io/docs/update.html#Update-Changed-Fields
func (*DB) Where ¶
Where add conditions
See the docs for details on the various formats that where clauses can take. By default, where clauses chain with AND.
// Find the first user with name jinzhu db.Where("name = ?", "jinzhu").First(&user) // Find the first user with name jinzhu and age 20 db.Where(&User{Name: "jinzhu", Age: 20}).First(&user) // Find the first user with name jinzhu and age not equal to 20 db.Where("name = ?", "jinzhu").Where("age <> ?", "20").First(&user)
type DeleteDom ¶ added in v1.0.1
type DeleteDom struct { Name xml.Name `xml:"delete"` Id string `xml:"id,attr"` Param string `xml:"param,attr"` Result string `xml:"result,attr"` Value string `xml:",innerxml"` }
DeleteDom 删除
type DeletedAt ¶
func (DeletedAt) MarshalJSON ¶
func (*DeletedAt) UnmarshalJSON ¶
type Dialector ¶
type Dialector interface { Name() string Initialize(*DB) error Migrator(db *DB) Migrator DataTypeOf(*schema.Field) string DefaultValueOf(*schema.Field) clause.Expression BindVarTo(writer clause.Writer, stmt *Statement, v interface{}) QuoteTo(clause.Writer, string) Explain(sql string, vars ...interface{}) string }
Dialector GORM database dialector
type DynamicItem ¶ added in v1.0.1
type DynamicItem = map[string]*DynamicNode
type DynamicModel ¶ added in v1.0.1
type DynamicModel struct { TableName string // 表名 Nodes map[DynamicType]DynamicItem }
DynamicModel mapper模型
func DynamicParser ¶ added in v1.0.1
type DynamicNode ¶ added in v1.0.1
type DynamicNode struct { Id string // SQL名称 Content string // SQL内容 ParamName string // 参数类型名称 QueryName string // 查询参数 ResultName string // 返回类型名称 Param any // 参数内容 Query any // 查询参数 Tpl *pongo.Template // 模板 Offset int Limit int }
DynamicNode SQL模型
type DynamicType ¶ added in v1.0.1
type DynamicType int
DynamicType 动态模型类型
const ( Select DynamicType = iota Update Delete Insert )
type ErrorTranslator ¶
type GetDBConnector ¶
GetDBConnector SQL db connector
type GetDBConnectorWithContext ¶
GetDBConnectorWithContext represents SQL db connector which takes into account the current database context
type InsertDom ¶ added in v1.0.1
type InsertDom struct { Name xml.Name `xml:"insert"` Id string `xml:"id,attr"` Param string `xml:"param,attr"` Result string `xml:"result,attr"` Value string `xml:",innerxml"` }
InsertDom 插入
type Migrator ¶
type Migrator interface { // AutoMigrate AutoMigrate(dst ...interface{}) error // Database CurrentDatabase() string FullDataTypeOf(*schema.Field) clause.Expr GetTypeAliases(databaseTypeName string) []string // Tables CreateTable(dst ...interface{}) error DropTable(dst ...interface{}) error HasTable(dst interface{}) bool RenameTable(oldName, newName interface{}) error GetTables() (tableList []string, err error) TableType(dst interface{}) (TableType, error) // Columns AddColumn(dst interface{}, field string) error DropColumn(dst interface{}, field string) error AlterColumn(dst interface{}, field string) error MigrateColumn(dst interface{}, field *schema.Field, columnType ColumnType) error HasColumn(dst interface{}, field string) bool RenameColumn(dst interface{}, oldName, field string) error ColumnTypes(dst interface{}) ([]ColumnType, error) // Views CreateView(name string, option ViewOption) error DropView(name string) error // Constraints CreateConstraint(dst interface{}, name string) error DropConstraint(dst interface{}, name string) error HasConstraint(dst interface{}, name string) bool // Indexes CreateIndex(dst interface{}, name string) error DropIndex(dst interface{}, name string) error HasIndex(dst interface{}, name string) bool RenameIndex(dst interface{}, oldName, newName string) error GetIndexes(dst interface{}) ([]Index, error) }
Migrator migrator interface
type Model ¶
type Model struct { ID uint `gorm:"primarykey"` CreatedAt time.Time UpdatedAt time.Time DeletedAt DeletedAt `gorm:"index"` }
Model a basic GoLang struct which includes the following fields: ID, CreatedAt, UpdatedAt, DeletedAt It may be embedded into your model or you may build your own model without it
type User struct { gorm.Model }
type ParamsFilter ¶
type PreparedStmtDB ¶
type PreparedStmtDB struct { Stmts map[string]*Stmt PreparedSQL []string Mux *sync.RWMutex ConnPool }
func NewPreparedStmtDB ¶
func NewPreparedStmtDB(connPool ConnPool) *PreparedStmtDB
func (*PreparedStmtDB) Close ¶
func (db *PreparedStmtDB) Close()
func (*PreparedStmtDB) ExecContext ¶
func (*PreparedStmtDB) QueryContext ¶
func (*PreparedStmtDB) QueryRowContext ¶
func (*PreparedStmtDB) Reset ¶
func (db *PreparedStmtDB) Reset()
type PreparedStmtTX ¶
type PreparedStmtTX struct { Tx PreparedStmtDB *PreparedStmtDB }
func (*PreparedStmtTX) Commit ¶
func (tx *PreparedStmtTX) Commit() error
func (*PreparedStmtTX) ExecContext ¶
func (*PreparedStmtTX) QueryContext ¶
func (*PreparedStmtTX) QueryRowContext ¶
func (*PreparedStmtTX) Rollback ¶
func (tx *PreparedStmtTX) Rollback() error
type Rows ¶
type Rows interface { Columns() ([]string, error) ColumnTypes() ([]*sql.ColumnType, error) Next() bool Scan(dest ...interface{}) error Err() error Close() error }
Rows rows interface
type SavePointerDialectorInterface ¶
type SavePointerDialectorInterface interface { SavePoint(tx *DB, name string) error RollbackTo(tx *DB, name string) error }
SavePointerDialectorInterface save pointer interface
type SelectDom ¶ added in v1.0.1
type SelectDom struct { Name xml.Name `xml:"select"` Id string `xml:"id,attr"` Param string `xml:"param,attr"` Result string `xml:"result,attr"` Value string `xml:",innerxml"` }
SelectDom 查询
type Session ¶
type Session struct { DryRun bool PrepareStmt bool NewDB bool Initialized bool SkipHooks bool SkipDefaultTransaction bool DisableNestedTransaction bool AllowGlobalUpdate bool FullSaveAssociations bool QueryFields bool Context context.Context Logger logger.Interface NowFunc func() time.Time CreateBatchSize int }
Session session config when create session with Session() method
type SoftDeleteDeleteClause ¶
type SoftDeleteDeleteClause struct { ZeroValue sql.NullString Field *schema.Field }
func (SoftDeleteDeleteClause) Build ¶
func (sd SoftDeleteDeleteClause) Build(clause.Builder)
func (SoftDeleteDeleteClause) MergeClause ¶
func (sd SoftDeleteDeleteClause) MergeClause(*clause.Clause)
func (SoftDeleteDeleteClause) ModifyStatement ¶
func (sd SoftDeleteDeleteClause) ModifyStatement(stmt *Statement)
func (SoftDeleteDeleteClause) Name ¶
func (sd SoftDeleteDeleteClause) Name() string
type SoftDeleteQueryClause ¶
type SoftDeleteQueryClause struct { ZeroValue sql.NullString Field *schema.Field }
func (SoftDeleteQueryClause) Build ¶
func (sd SoftDeleteQueryClause) Build(clause.Builder)
func (SoftDeleteQueryClause) MergeClause ¶
func (sd SoftDeleteQueryClause) MergeClause(*clause.Clause)
func (SoftDeleteQueryClause) ModifyStatement ¶
func (sd SoftDeleteQueryClause) ModifyStatement(stmt *Statement)
func (SoftDeleteQueryClause) Name ¶
func (sd SoftDeleteQueryClause) Name() string
type SoftDeleteUpdateClause ¶
type SoftDeleteUpdateClause struct { ZeroValue sql.NullString Field *schema.Field }
func (SoftDeleteUpdateClause) Build ¶
func (sd SoftDeleteUpdateClause) Build(clause.Builder)
func (SoftDeleteUpdateClause) MergeClause ¶
func (sd SoftDeleteUpdateClause) MergeClause(*clause.Clause)
func (SoftDeleteUpdateClause) ModifyStatement ¶
func (sd SoftDeleteUpdateClause) ModifyStatement(stmt *Statement)
func (SoftDeleteUpdateClause) Name ¶
func (sd SoftDeleteUpdateClause) Name() string
type SqlBuilder ¶ added in v1.0.1
type SqlBuilder struct {
// contains filtered or unexported fields
}
SqlBuilder SQL构建器
func NewBuilder ¶ added in v1.0.1
func NewBuilder() *SqlBuilder
func (*SqlBuilder) DExecute ¶ added in v1.0.2
func (s *SqlBuilder) DExecute(value any) (tx *DB)
func (*SqlBuilder) Delete ¶ added in v1.0.2
func (s *SqlBuilder) Delete() *SqlBuilder
func (*SqlBuilder) From ¶ added in v1.0.1
func (s *SqlBuilder) From(tableName string, alias ...string) *SqlBuilder
From 查询的表
func (*SqlBuilder) FromQuery ¶ added in v1.0.1
func (s *SqlBuilder) FromQuery(handler func(query *SqlBuilder), alias string) *SqlBuilder
FromQuery 子查询构建
func (*SqlBuilder) GroupBy ¶ added in v1.0.1
func (s *SqlBuilder) GroupBy(fieldName string) *SqlBuilder
func (*SqlBuilder) IJoin ¶ added in v1.0.1
func (s *SqlBuilder) IJoin(tableName, on string) *SqlBuilder
func (*SqlBuilder) LJoin ¶ added in v1.0.1
func (s *SqlBuilder) LJoin(tableName, on string) *SqlBuilder
func (*SqlBuilder) Limit ¶ added in v1.0.1
func (s *SqlBuilder) Limit(limit int64) *SqlBuilder
func (*SqlBuilder) Offset ¶ added in v1.0.1
func (s *SqlBuilder) Offset(offset int64) *SqlBuilder
func (*SqlBuilder) OrderBy ¶ added in v1.0.1
func (s *SqlBuilder) OrderBy(query ...*SqlToken) *SqlBuilder
func (*SqlBuilder) QExecute ¶ added in v1.0.2
func (s *SqlBuilder) QExecute(value any) (tx *DB)
func (*SqlBuilder) RJoin ¶ added in v1.0.1
func (s *SqlBuilder) RJoin(tableName, on string) *SqlBuilder
func (*SqlBuilder) Select ¶ added in v1.0.1
func (s *SqlBuilder) Select(fields ...*SqlToken) *SqlBuilder
Select Select部分
func (*SqlBuilder) Set ¶ added in v1.0.2
func (s *SqlBuilder) Set(fields ...*SqlToken) *SqlBuilder
func (*SqlBuilder) Table ¶ added in v1.0.2
func (s *SqlBuilder) Table(tableName string, alias ...string) *SqlBuilder
func (*SqlBuilder) UExecute ¶ added in v1.0.2
func (s *SqlBuilder) UExecute() (tx *DB)
func (*SqlBuilder) Union ¶ added in v1.0.1
func (s *SqlBuilder) Union(query func(builder *SqlBuilder)) *SqlBuilder
func (*SqlBuilder) UnionAll ¶ added in v1.0.1
func (s *SqlBuilder) UnionAll(query func(builder *SqlBuilder)) *SqlBuilder
func (*SqlBuilder) Update ¶ added in v1.0.2
func (s *SqlBuilder) Update() *SqlBuilder
func (*SqlBuilder) Where ¶ added in v1.0.1
func (s *SqlBuilder) Where(query ...*SqlToken) *SqlBuilder
Where 条件构建
func (*SqlBuilder) WhereOr ¶ added in v1.0.1
func (s *SqlBuilder) WhereOr(query ...*SqlToken) *SqlBuilder
WhereOr 条件构建
type SqlToken ¶ added in v1.0.1
type SqlToken struct {
// contains filtered or unexported fields
}
SqlToken SQL token构建器
type Statement ¶
type Statement struct { *DB TableExpr *clause.Expr Table string Alias string // 表的别名 Mapper *DynamicModel // 模版映射 MapperItem *DynamicNode // 模版映射 Model interface{} Unscoped bool Dest interface{} ReflectValue reflect.Value Clauses map[string]clause.Clause BuildClauses []string Distinct bool Selects []string // selected columns Omits []string // omit columns Joins []join Preloads map[string][]interface{} Settings sync.Map ConnPool ConnPool Schema *schema.Schema Context context.Context RaiseErrorOnNotFound bool SkipHooks bool SQL strings.Builder Vars []interface{} CurDestIndex int // contains filtered or unexported fields }
Statement statement
func (*Statement) AddClauseIfNotExists ¶
AddClauseIfNotExists add clause if not exists
func (*Statement) BuildCondition ¶
func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []clause.Expression
BuildCondition build condition
func (*Statement) ParseWithSpecialTableName ¶
func (*Statement) SelectAndOmitColumns ¶
func (stmt *Statement) SelectAndOmitColumns(requireCreate, requireUpdate bool) (map[string]bool, bool)
SelectAndOmitColumns get select and omit columns, select -> true, omit -> false
func (*Statement) SetColumn ¶
SetColumn set column's value
stmt.SetColumn("Name", "jinzhu") // Hooks Method stmt.SetColumn("Name", "jinzhu", true) // Callbacks Method
func (*Statement) WriteQuoted ¶
func (stmt *Statement) WriteQuoted(value interface{})
WriteQuoted write quoted value
type StatementModifier ¶
type StatementModifier interface {
ModifyStatement(*Statement)
}
StatementModifier statement modifier interface
type TableType ¶
type TableType interface { Schema() string Name() string Type() string Comment() (comment string, ok bool) }
TableType table type interface
type Tx ¶
type Tx interface { ConnPool TxCommitter StmtContext(ctx context.Context, stmt *sql.Stmt) *sql.Stmt }
Tx sql.Tx interface
type TxBeginner ¶
TxBeginner tx beginner
type TxCommitter ¶
TxCommitter tx committer
type UpdateDom ¶ added in v1.0.1
type UpdateDom struct { Name xml.Name `xml:"update"` Id string `xml:"id,attr"` Param string `xml:"param,attr"` Query string `xml:"query,attr"` Result string `xml:"result,attr"` Value string `xml:",innerxml"` }
UpdateDom 更新
type ViewOption ¶
type ViewOption struct { Replace bool // If true, exec `CREATE`. If false, exec `CREATE OR REPLACE` CheckOption string // optional. e.g. `WITH [ CASCADED | LOCAL ] CHECK OPTION` Query *DB // required subquery. }
ViewOption view option