【问题标题】:gorm use the find rerurn emptygorm 使用 find 重新运行为空
【发布时间】:2021-08-17 02:19:06
【问题描述】:

我使用 find 方法查找一些记录,但是当我发送错误的条件时,它应该返回 ErrRecordNotFound,但它返回一个空结构

var projectSetBudget domain.ProjectSetBudget
filter := &domain.ProjectSetBudget{}
filter.TenantID = tenantID
filter.ID = ProjectSetBudgetID
res := r.db.Where(filter).Find(&projectSetBudget)

我只是打印信息

zap.S().Info(errors.Is(res.Error, gorm.ErrRecordNotFound))

它打印错误

并返回空结构

{
    "ID": 0,
    "CreatedAt": "0001-01-01T00:00:00Z",
    "UpdatedAt": "0001-01-01T00:00:00Z",
    "DeletedAt": null,
    "title": "",
}

【问题讨论】:

  • 只是打印错误,可能还有其他错误。如果有错误,你的结构是空的。
  • 如果 gorm 没有找到记录,它可能会返回一个空结构。我在字段中添加“omitempty”标签可以提供帮助。我在named hyperlinks找到答案

标签: go go-gorm


【解决方案1】:

GORM提供First、Take、Last方法从数据库中检索单个对象,它在查询数据库时添加了LIMIT 1条件,如果没有记录会返回错误ErrRecordNotFound找到了。 https://gorm.io/docs/query.html

只有 First、Take、Last 方法,但找到 如果你使用 First, Take, Last 会有 ErrRecordNotFound

First、Take、Last有以下代码,而find没有,find不会只找到一个,所以你可以通过计数知道它找到与否:

tx.Statement.RaiseErrorOnNotFound = true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 2022-08-15
    • 2014-11-06
    • 1970-01-01
    • 2012-11-26
    • 2016-05-01
    • 2022-11-24
    • 2019-07-10
    相关资源
    最近更新 更多