Maison >développement back-end >Golang >Comment utiliser les appareils TOML pour amorcer ma base de données dans un environnement de développement utilisant le framework Go Buffalo ?

Comment utiliser les appareils TOML pour amorcer ma base de données dans un environnement de développement utilisant le framework Go Buffalo ?

王林
王林avant
2024-02-11 13:33:08591parcourir

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

Lors du développement avec le framework Go Buffalo, nous avons souvent besoin d'amorcer la base de données afin de renseigner certaines données initiales dans les environnements de test et de développement. TOML est un format de fichier de configuration simple et facile à lire qui peut être utilisé pour définir des données. Alors, comment utiliser les fichiers TOML pour amorcer notre base de données ? Dans cet article, l'éditeur PHP Xiaoxin vous présentera une méthode simple pour amorcer une base de données à l'aide de périphériques TOML dans l'environnement de développement du framework Go Buffalo. Nous allons jeter un coup d'oeil!

Contenu de la question

J'essaie d'utiliser les appareils TOML pour amorcer ma base de données de développement dans le framework Go Buffalo. Cependant, je ne trouve pas d'exemple clair ni de documentation sur la façon de procéder.

Solution de contournement

Pour amorcer la base de données, vous pouvez utiliser des arnaques. Lors de la création d'une nouvelle application, un espace réservé factice doit être généré à grifts/db.go comme ceci :

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
    })

})

J'ai essayé d'utiliser model.loadfixture("seed widgets") avec grift mais j'ai eu une certaine panique car ce n'est pas dans l'environnement de test. Je ne pense pas qu'il existe un support direct pour l'amorçage de bases de données à partir d'installations toml, mais ce serait une fonctionnalité utile. Cependant, en regardant le code dans loadfixture, nous pouvons créer notre propre chargement de luminaire :

Supposons que vous ayez un appareil pour une scène nommée 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
    })

})

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer