Database
Goigniter uses GORM for database access. SQLite and MySQL are supported out of the box.
Configuration
Section titled “Configuration”Set the DB_DSN environment variable in .env:
DB_DSN="root:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"APP_PORT=:8080For SQLite:
DB_DSN="test.db"The database connection is automatically initialized when the application starts.
Models
Section titled “Models”Models are Go structs that represent database tables:
package models
import "time"
type Product struct { ID uint `gorm:"primaryKey"` Name string `gorm:"size:255;not null"` Price float64 `gorm:"not null"` Description string `gorm:"type:text"` CreatedAt time.Time UpdatedAt time.Time}Tag rules:
gorm:"primaryKey"— primary keygorm:"size:255"— maximum lengthgorm:"not null"— required fieldgorm:"type:text"— custom SQL typegorm:"uniqueIndex"— unique constraint
Auto Migration
Section titled “Auto Migration”Models are auto-migrated on startup. Add models to the migration list in main.go:
config.DB.AutoMigrate(&models.Product{}, &models.User{})This creates or updates tables to match the struct definitions.
Basic Queries
Section titled “Basic Queries”import "goigniter/config"
// Get all productsvar products []models.Productconfig.DB.Find(&products)
// Get by IDvar product models.Productconfig.DB.First(&product, id)
// Get with conditionconfig.DB.Where("price > ?", 100).Find(&products)
// Createproduct := models.Product{Name: "Coffee", Price: 2.50}config.DB.Create(&product)
// Updateconfig.DB.Model(&product).Update("Price", 3.00)
// Deleteconfig.DB.Delete(&product)Common Patterns
Section titled “Common Patterns”Pagination
Section titled “Pagination”func getProducts(page int, pageSize int) []models.Product { var products []models.Product offset := (page - 1) * pageSize config.DB.Offset(offset).Limit(pageSize).Find(&products) return products}Ordering
Section titled “Ordering”config.DB.Order("created_at DESC").Find(&products)config.DB.Order("price ASC").Find(&products)var count int64config.DB.Model(&models.Product{}).Where("price > ?", 100).Count(&count)First or Create
Section titled “First or Create”config.DB.Where(models.Product{Name: "Coffee"}).FirstOrCreate(&product)Next: Query Builder for building SQL queries with method chaining.