使用 gorm

This commit is contained in:
2024-11-04 01:39:18 +08:00
parent 3020481eca
commit 7f4de71495
4 changed files with 53 additions and 30 deletions

View File

@@ -11,6 +11,8 @@ import (
"github.com/graphql-go/graphql/language/ast"
"github.com/jmoiron/sqlx"
"github.com/mitchellh/mapstructure"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 自动生成 GraphQL 类型的函数
@@ -48,6 +50,18 @@ func generateGraphQLType(model interface{}) (*graphql.Object, error) {
func NewSchema(config Config) (graphql.Schema, error) {
db, err := gorm.Open(mysql.Open(fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
config.Mysql.UserName,
config.Mysql.Password,
config.Mysql.Host,
config.Mysql.Port,
config.Mysql.Database,
)), &gorm.Config{})
if err != nil {
log.Fatal("failed to connect to database:", err)
}
// 打开数据库连接
connection, err := sqlx.Connect("mysql", fmt.Sprintf(
"%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
@@ -229,39 +243,28 @@ func NewSchema(config Config) (graphql.Schema, error) {
var err error
// 获取筛选条件
var category Category
mapstructure.Decode(p.Args, &category)
var arg struct {
ID int
Title string
Keyword string
ParentID int
First int
Last int
After string
Before string
}
mapstructure.Decode(p.Args, &arg)
// 获取翻页参数
var first, last int
var after, before string
if p.Args["first"] != nil {
first = p.Args["first"].(int)
}
if p.Args["last"] != nil {
last = p.Args["last"].(int)
}
if p.Args["after"] != nil {
after = p.Args["after"].(string)
}
if p.Args["before"] != nil {
before = p.Args["before"].(string)
var limit int = 10
if arg.First != 0 {
limit = arg.First
} else if arg.Last != 0 {
limit = arg.Last
}
fmt.Println(first, last, after, before)
// 获取请求的字段
fields := strings.Join(get_fields(p.Info.FieldASTs[0].SelectionSet.Selections), ",")
// 筛选条件
where_str := ""
// 查询分类列表
var query strings.Builder
query.WriteString(fmt.Sprintf("SELECT %s FROM web_article %s LIMIT %d OFFSET %d", fields, where_str, 10, 0))
if err := connection.Select(&categorys, query.String()); err != nil {
fmt.Println("查询分类列表失败", err)
return nil, err
result := db.Limit(limit).Where("id > 0").Find(&categorys)
if result.Error != nil {
return nil, result.Error
}
return map[string]interface{}{

View File

@@ -140,6 +140,11 @@ type Category struct {
ArticleNum int
}
// TableName 方法用于自定义表名
func (Category) TableName() string {
return "web_article_category"
}
// 输入配置
type ConfigMysql struct {
Host string