【发布时间】: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(&users).Error -
@BogdanIulianBursuc 没有错误,我已经检查了两次
-
您可以尝试为该查询启用调试并查看
gorm尝试创建的 SQL:ur.db.Debug().Find(&users) -
@BogdanIulianBursuc 谢谢,所以查询尝试选择deleted_at 为空的位置,而我的deleted_at 值不为空。谢谢你
-
也许您使用了 SoftDelete 功能?在这里阅读:jinzhu.me/gorm/crud.html#delete