Heim >Backend-Entwicklung >Golang >Wie verwende ich TOML-Fixtures zum Seeding meiner Datenbank in einer Entwicklungsumgebung mit dem Go Buffalo-Framework?
Bei der Entwicklung mit dem Go Buffalo-Framework müssen wir häufig ein Seeding der Datenbank durchführen, um einige Anfangsdaten in die Test- und Entwicklungsumgebungen zu füllen. TOML ist ein einfaches und leicht lesbares Konfigurationsdateiformat, das zum Definieren von Daten verwendet werden kann. Wie verwenden wir also TOML-Dateien zum Seeding unserer Datenbank? In diesem Artikel stellt Ihnen der PHP-Editor Xiaoxin eine einfache Methode zum Seeding einer Datenbank mithilfe von TOML-Geräten in der Entwicklungsumgebung des Go Buffalo-Frameworks vor. Lass uns einen Blick darauf werfen!
Ich versuche, TOML-Fixtures zu verwenden, um meine Entwicklungsdatenbank in das Go Buffalo-Framework einzubinden. Ich kann jedoch kein klares Beispiel oder keine Dokumentation dazu finden.
Zum Seeding der Datenbank können Sie Grifts verwenden. Beim Erstellen einer neuen Anwendung sollte ein Dummy-Platzhalter-Grift bei grifts/db.go
wie folgt generiert werden:
package grifts import "github.com/gobuffalo/grift/grift" var _ = grift.namespace("db", func() { grift.desc("seed", "seeds a database") grift.add("seed", func(c *grift.context) error { // add db seeding stuff here return nil }) })
Ich habe versucht, model.loadfixture("seed widgets")
mit Grift zu verwenden, hatte aber etwas Panik, weil es nicht in der Testumgebung verfügbar ist. Ich glaube nicht, dass es eine direkte Unterstützung für das Datenbank-Seeding von Toml-Installationen gibt, aber es wäre eine nützliche Funktion. Wenn wir uns jedoch den Code in loadfixture ansehen, können wir unseren eigenen Fixture Loader erstellen:
Angenommen, Sie haben ein Fixture für eine Szene mit dem Namen name = "seed widgets"
:
package grifts import ( "fmt" "os" "strings" "github.com/gobuffalo/grift/grift" "github.com/gobuffalo/suite/v4" "github.com/gobuffalo/suite/v4/fix" ) var _ = grift.Namespace("db", func() { grift.Desc("seed", "Seeds a database") grift.Add("seed", func(c *grift.Context) error { // The DB connection will connect to the environment set in `GO_ENV` (defaults to `test`) // Set this environment variable in your `.env` file to `development` // NOTE: it may be better to put seed fixtures in a different directory // to seperate concerns model, err := suite.NewModelWithFixtures(os.DirFS("./fixtures")) if err != nil { return err } sc, err := fix.Find("seed widgets") if err != nil { return err } for _, table := range sc.Tables { for _, row := range table.Row { q := "insert into " + table.Name keys := []string{} skeys := []string{} for k := range row { keys = append(keys, k) skeys = append(skeys, ":"+k) } q = q + fmt.Sprintf(" (%s) values (%s)", strings.Join(keys, ","), strings.Join(skeys, ",")) if _, err = model.DB.Store.NamedExec(q, row); err != nil { return err } } } return nil }) })
Das obige ist der detaillierte Inhalt vonWie verwende ich TOML-Fixtures zum Seeding meiner Datenbank in einer Entwicklungsumgebung mit dem Go Buffalo-Framework?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!