Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah cara saya menggunakan lekapan TOML untuk menyemai pangkalan data saya dalam persekitaran pembangunan menggunakan rangka kerja Go Buffalo?

Bagaimanakah cara saya menggunakan lekapan TOML untuk menyemai pangkalan data saya dalam persekitaran pembangunan menggunakan rangka kerja Go Buffalo?

王林
王林ke hadapan
2024-02-11 13:33:08591semak imbas

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

Apabila membangun dengan rangka kerja Go Buffalo, kita selalunya perlu menyemai pangkalan data untuk mengisi persekitaran ujian dan pembangunan dengan beberapa data awal. TOML ialah format fail konfigurasi yang ringkas dan mudah dibaca yang boleh digunakan untuk menentukan data. Jadi bagaimana kita menggunakan fail TOML untuk menyemai pangkalan data kita? Dalam artikel ini, editor PHP Xiaoxin akan memperkenalkan anda kepada kaedah mudah untuk menyemai pangkalan data menggunakan peranti TOML dalam persekitaran pembangunan rangka kerja Go Buffalo. Mari lihat!

Kandungan soalan

Saya cuba menggunakan lekapan TOML untuk menyemai pangkalan data pembangunan saya dalam rangka kerja Go Buffalo. Walau bagaimanapun, saya tidak dapat mencari contoh atau dokumentasi yang jelas tentang cara melakukan ini.

Penyelesaian

Untuk menyemai pangkalan data anda boleh menggunakan grifts. Apabila membuat aplikasi baharu, grift pemegang tempat tiruan harus dijana pada grifts/db.go seperti ini:

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

})

Saya cuba menggunakan model.loadfixture("seed widgets") dengan grift tetapi agak panik kerana ia tidak berada dalam persekitaran ujian. Saya tidak fikir terdapat sokongan langsung untuk pembenihan pangkalan data daripada pemasangan toml, tetapi ia akan menjadi ciri yang berguna. Walau bagaimanapun, melihat kod dalam loadfixture kita boleh membina pemuatan lekapan kita sendiri:

Andaikan anda mempunyai perlawanan untuk adegan bernama 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
    })

})

Atas ialah kandungan terperinci Bagaimanakah cara saya menggunakan lekapan TOML untuk menyemai pangkalan data saya dalam persekitaran pembangunan menggunakan rangka kerja Go Buffalo?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam