Heim >Backend-Entwicklung >Golang >Wie verwende ich TOML-Fixtures zum Seeding meiner Datenbank in einer Entwicklungsumgebung mit dem Go Buffalo-Framework?

Wie verwende ich TOML-Fixtures zum Seeding meiner Datenbank in einer Entwicklungsumgebung mit dem Go Buffalo-Framework?

王林
王林nach vorne
2024-02-11 13:33:08591Durchsuche

如何使用 TOML 装置在使用 Go Buffalo 框架的开发环境中为我的数据库播种?

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!

Frageninhalt

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.

Workaround

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen