使用 gorm
This commit is contained in:
@@ -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{}{
|
||||
|
@@ -140,6 +140,11 @@ type Category struct {
|
||||
ArticleNum int
|
||||
}
|
||||
|
||||
// TableName 方法用于自定义表名
|
||||
func (Category) TableName() string {
|
||||
return "web_article_category"
|
||||
}
|
||||
|
||||
// 输入配置
|
||||
type ConfigMysql struct {
|
||||
Host string
|
||||
|
Reference in New Issue
Block a user