Defining a Model

In ModelsHandler, a model represents a database table. Models are defined using Go structs where each field corresponds to a database column.

A model is created using model.New and a struct containing pointer fields to model.Field. The database connection is provided when initializing the model.


// db is a standard *sql.DB instance
var Users = model.New("users", struct {
    UserId   *model.Field
    UserName *model.Field
    Password *model.Field
}{
    UserId:   model.CreateField().AsVarchar(100).IsPrimary().NotNull(),
    UserName: model.CreateField().AsVarchar(30).IsUnique().NotNull(),
    Password: model.CreateField().AsText().NotNull(),
}).WithDB(db)

// Initialising Seperate DB instance for each model.
var Users = model.New("users", struct {
    UserId   *model.Field
    UserName *model.Field
    Password *model.Field
}{
    UserId:   model.CreateField().AsVarchar(100).IsPrimary().NotNull(),
    UserName: model.CreateField().AsVarchar(30).IsUnique().NotNull(),
    Password: model.CreateField().AsText().NotNull(),
}).initializeDB("driver", DSN) // driver: "mysql", "postgres", etc. DSN: Data Source Name
                    

Field Types

Field types define how data is stored in the database. ModelsHandler provides a fluent API for defining common SQL types.


// String types
model.CreateField().AsVarchar(255)
model.CreateField().AsText()

// Numeric types
model.CreateField().AsInt()
model.CreateField().AsBigInt()

// Special types
model.CreateField().AsBool()
model.CreateField().AsJSON()
                    

Field Modifiers

Modifiers add constraints and behavior to fields. They can be chained after defining a field type.


model.CreateField().
    AsVarchar(100).
    NotNull().
    IsUnique().
    Default("guest")
                    

Accessing Fields

After defining a model, all fields are accessible through the .Fields property.


Users.Fields.UserId
Users.Fields.UserName
Users.Fields.Password
                    

These field references are used throughout the query builder to ensure type-safe queries.

Next Steps

From here, continue with: