go-admin icon indicating copy to clipboard operation
go-admin copied to clipboard

在 go-admin 中使用 gorm 时,无法从数据库中获取到时间信息

Open 0xDkd opened this issue 5 years ago • 5 comments

问题描述 [详细地描述问题,让大家都能理解]

在 goadmin 中使用自带的 gorm 无法获取数据库中的时间,出现类型的错误

搭建 go-admin 的时候选择 gorm 作为数据库工具,base.go 如下所示

package models

import (
	"fmt"
	"github.com/GoAdminGroup/go-admin/modules/db"
	"github.com/jinzhu/gorm"
	"time"
)

var (
	orm *gorm.DB
	err error
)

//定义基础的 Model 实例
type Model struct {
	//基础ID,自增,主键
	ID         uint    `json:"id" gorm:"primary_key" `
	//创建时间
	CreatedAt  time.Time    `json:"created_at" `
	//更新时间
	UpdateAt time.Time    `json:"updated_at" `
	//删除时间
	//DeletedOn  int    `json:"deleted_on" `
}



//初始化链接数据库,通过GoAdmin的配置进行链接
func Init(c db.Connection) {
	//
	orm, err = gorm.Open("mysql", c.GetDB("default"))
	fmt.Println(c.GetDB("default"))


	if err != nil {
		panic("initialize orm failed")
	}
}

当使用 orm.find(&model)的时候gorm会出现报 [2020-09-23 21:07:12] sql: Scan error on column index 3, name "created_at": unsupported Scan, storing driver.Value type []uint8 into type *time.Time

查找资料发现需要在 gorm 链接数据库时增添一部门参数才能解决这个问题,如这里中所提到的解决方法。

在 go-admin 中应该如何修改才能解决这个问题?

0xDkd avatar Sep 23 '20 13:09 0xDkd

请问是否解决了我也遇到了类似的问题

gofromzero avatar Jan 11 '21 07:01 gofromzero

@gofromzero 我自己实例化 gorm了,实例化了两个 gorm 一个是自己的,一个是默认的,需要时间的地方用自己的 gorm 解决

0xDkd avatar Jan 11 '21 07:01 0xDkd

@gofromzero 我自己实例化 gorm了,实例化了两个 gorm 一个是自己的,一个是默认的,需要时间的地方用自己的 gorm 解决

了解了谢谢

gofromzero avatar Jan 12 '21 01:01 gofromzero

@gofromzero 我自己实例化 gorm了,实例化了两个 gorm 一个是自己的,一个是默认的,需要时间的地方用自己的 gorm 解决

我发现config.json 里的数据库配置有个dsn 参数 能覆盖其他参数。 go-admin/models/config/config.go 中的Database struct https://github.com/GoAdminGroup/go-admin/blob/57bcf6d25f6828ae08baffb0c9c258ee7f51d33c/modules/config/config.go#L26

// Database is a type of database connection config.
//
// Because a little difference of different database driver.
// The Config has multiple options but may not be used.
// Such as the sqlite driver only use the File option which
// can be ignored when the driver is mysql.
//
// If the Dsn is configured, when driver is mysql/postgresql/
// mssql, the other configurations will be ignored, except for
// MaxIdleCon and MaxOpenCon.
type Database struct {
	Host       string            `json:"host,omitempty" yaml:"host,omitempty" ini:"host,omitempty"`
	Port       string            `json:"port,omitempty" yaml:"port,omitempty" ini:"port,omitempty"`
	User       string            `json:"user,omitempty" yaml:"user,omitempty" ini:"user,omitempty"`
	Pwd        string            `json:"pwd,omitempty" yaml:"pwd,omitempty" ini:"pwd,omitempty"`
	Name       string            `json:"name,omitempty" yaml:"name,omitempty" ini:"name,omitempty"`
	MaxIdleCon int               `json:"max_idle_con,omitempty" yaml:"max_idle_con,omitempty" ini:"max_idle_con,omitempty"`
	MaxOpenCon int               `json:"max_open_con,omitempty" yaml:"max_open_con,omitempty" ini:"max_open_con,omitempty"`
	Driver     string            `json:"driver,omitempty" yaml:"driver,omitempty" ini:"driver,omitempty"`
	DriverMode string            `json:"driver_mode,omitempty" yaml:"driver_mode,omitempty" ini:"driver_mode,omitempty"`
	File       string            `json:"file,omitempty" yaml:"file,omitempty" ini:"file,omitempty"`
	Dsn        string            `json:"dsn,omitempty" yaml:"dsn,omitempty" ini:"dsn,omitempty"`
	Params     map[string]string `json:"params,omitempty" yaml:"params,omitempty" ini:"params,omitempty"`
}

gofromzero avatar Jan 12 '21 02:01 gofromzero

直接使用dsn的配置就可行了

auqf avatar Aug 22 '22 06:08 auqf