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: