RapidGo
No results found

Seeders

Populate your database with test data and default records.

Seeders populate your database with initial or test data.

Creating a Seeder

package seeders

import "gorm.io/gorm"

func init() {
    Register(&PostSeeder{})
}

type PostSeeder struct{}

func (s *PostSeeder) Name() string { return "PostSeeder" }

func (s *PostSeeder) Seed(db *gorm.DB) error {
    posts := []models.Post{
        {Title: "First Post", Body: "Hello, world!"},
        {Title: "Second Post", Body: "Getting started with RapidGo"},
    }
    for _, p := range posts {
        db.FirstOrCreate(&p, models.Post{Title: p.Title})
    }
    return nil
}

Running Seeders

# Run all seeders
go run cmd/main.go db:seed

# Run a specific seeder by name
go run cmd/main.go db:seed --seeder PostSeeder

Seeder Wiring

In cmd/main.go:

cli.SetSeeder(func(db *gorm.DB, name string) error {
    if name != "" {
        return seeders.RunByName(db, name)
    }
    return seeders.RunAll(db)
})

Best Practices

  • Make seeders idempotent — use FirstOrCreate to avoid duplicates
  • Keep seeders focused — one seeder per model or concern
  • Use seeders for default admin users, settings, and test data