使用 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