【问题标题】:Golang (GIN Framework) : GORM Query didnt workGolang(GIN 框架):GORM 查询不起作用
【发布时间】:2021-01-14 13:04:06
【问题描述】:

很抱歉问了这么愚蠢的问题。 前几天刚学golang。

我想用 GIN 框架构建 API 服务。 我使用 Jinzhu gorm 查询 mysql 数据库。

问题是,我的查询结果总是空的。

这是我的代码:

模型文件夹:

package models

import "github.com/jinzhu/gorm"

type (
    User struct {
        gorm.Model
        Name    string `json:"name"`
        Phone   string `json:"phone"`
        Address string `json:"address"`
        Age     int    `json:"age"`
        Gender  string `json:"gender"`
    }
)

资源文件夹:

package resources

import (

    // Standard library packages
    "net/http"

    // Third party packages
    "../models"
    "github.com/gin-gonic/gin"
    "github.com/jinzhu/gorm"
)

type (
    UserResource struct {
        db *gorm.DB
    }
)

func NewUserResource(s *gorm.DB) *UserResource {
    return &UserResource{s}
}

func (ur UserResource) Index(c *gin.Context) {
    var users []models.User

    ur.db.Find(&users)
    if len(users) <= 0 {
        c.JSON(http.StatusNotFound, gin.H{"status": http.StatusNotFound, "error": "not found"})
        return
    }

    c.JSON(http.StatusOK, gin.H{"status": http.StatusOK, "data": users})
}

最后是控制器文件夹:

package controllers

import (
    "../resources"
    "github.com/gin-gonic/gin"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mysql"
)

type UserService struct {
}

func Database() *gorm.DB {
    //open a db connection
    db, err := gorm.Open("mysql", "root:root@/insp?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        panic("failed to connect database")
    }

    return db
}

func (s *UserService) Run() {
    // Instantiate a new router
    router := gin.Default()
    v1 := router.Group("/api/v1/users")
    {
        db := Database()
        us := resources.NewUserResource(db)
        v1.GET("/", us.Index)
    }
    router.Run(":9090")
}

每次我点击端点获取用户列表时,结果总是返回未找到用户。

但是当我更改为原始查询时,它运行良好

ur.db.Raw("SELECT * FROM users").Scan(&users)

我已经尝试阅读 GORM 文档。

有人知道怎么解决吗?

感谢您的建议

【问题讨论】:

  • 您需要查看gorm错误报告的结果。 err := ur.db.Find(&amp;users).Error
  • @BogdanIulianBursuc 没有错误,我已经检查了两次
  • 您可以尝试为该查询启用调试并查看gorm 尝试创建的 SQL:ur.db.Debug().Find(&amp;users)
  • @BogdanIulianBursuc 谢谢,所以查询尝试选择deleted_at 为空的位置,而我的deleted_at 值不为空。谢谢你
  • 也许您使用了 SoftDelete 功能?在这里阅读:jinzhu.me/gorm/crud.html#delete

标签: mysql go


【解决方案1】:

如果您的代码有数据库连接错误,请尝试添加一些记录器。我一般用logruslogger:

newLogger := logger.New(
    config.Log,
    logger.Config{
        SlowThreshold: time.Second,
        LogLevel:      logger.Error,
        Colorful:      false,
    },
)

并使用gorm连接线配置记录器

database, err := gorm.Open("root:root@/insp?charset=utf8&parseTime=True&loc=Local", &gorm.Config{Logger: newLogger})

在生产版本我推荐使用错误日志级别,但在调试模式下你可以使用信息日志级别来查看对数据库的 SQL 查询。

而且我认为我使用的版本比问题作者更新。抱歉,如果那样的话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多