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

2024年 2月 11日 59.2k 0

如何使用 toml 装置在使用 go buffalo 框架的开发环境中为我的数据库播种?

在使用Go Buffalo框架进行开发时,我们经常需要为数据库进行播种,以便在测试和开发环境中填充一些初始数据。TOML是一种简单易读的配置文件格式,它可以用来定义数据。那么如何使用TOML文件来为我们的数据库播种呢?在本文中,php小编小新将向您介绍一种简单的方法来在Go Buffalo框架的开发环境中使用TOML装置为数据库播种。让我们一起来看看吧!

问题内容

我正在尝试使用 TOML 固定装置在 Go Buffalo 框架中植入我的开发数据库。但是,我无法找到有关如何执行此操作的清晰示例或文档。

解决方法

要为数据库添加种子,您可以使用 grifts。创建新应用程序时,应该在 grifts/db.go 处生成一个虚拟占位符 grift,如下所示:

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

})

登录后复制

我尝试在 grift 中使用 model.loadfixture("seed widgets") ,但有一些恐慌,因为它不在测试环境中。我认为不直接支持从 toml 装置进行数据库播种,但这将是一个有用的功能。然而,查看 loadfixture 中的代码,我们可以构建我们的自己的夹具加载:

假设您有一个名为 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
})

})

登录后复制

以上就是如何使用 TOML 装置在使用 Go Buffalo 框架的开发环境中为我的数据库播种?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论