为了账号安全,请及时绑定邮箱和手机立即绑定

检查用户是否已存在于数据库中

检查用户是否已存在于数据库中

Go
湖上湖 2022-10-10 19:16:57
如何使用gorm检查用户是否已存在于数据库中?如果没有找到用户,我似乎找不到正确的方法来执行此操作而不会将错误记录到控制台。到目前为止,这是我的代码result := models.User{}err := connection.DB.First(&result, "username = ?", user.Username).Errorif err == gorm.ErrRecordNotFound {    if err := connection.DB.Create(&user).Error; err != nil {        return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{            "error": "internal server error",        })    }    return c.Status(fiber.StatusCreated).JSON(fiber.Map{        "message": "user created",    })}if result.Username != "" {    return c.Status(fiber.StatusConflict).JSON(fiber.Map{        "error": "username already exists",    })}return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{    "error": "internal server error",})但是如果创建了一个新用户,则会向终端打印一条错误消息,说明未找到该记录。
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

你也可以使用FirstOrCreate

来自Doc

获取第一个匹配记录或在给定条件下创建一个新记录(仅适用于结构、映射条件)

u := connection.DB.FirstOrCreate(user)


if u.Error != nil {

    return c.Status(fiber.StatusInternalServerError).JSON(

        fiber.Map{

            "error": "Internal server error",

        }

    )

}


if u.RowsAffected == 1 {

    return c.Status(fiber.StatusCreated).JSON(

        fiber.Map{

            "message": "User created successfully",

        }

    )

}


return c.Status(fiber.StatusBadRequest).JSON(

    fiber.Map{

        "error": "Username already exists",

    }

)


查看完整回答
反对 回复 2022-10-10
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

设法找到一种使用原始 MySQL 的方法。


var exists bool = false

if err := connection.DB.Raw(

    "SELECT EXISTS(SELECT 1 FROM users WHERE username = ?)",

    user.Username).

    Scan(&exists).Error; err != nil {


    return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{

        "error": "internal server error",

    })

}


if exists {


    return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{

        "error": "Username already exists",

    })

}


if err := connection.DB.Create(&user).Error; err != nil {


    return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{


        "error": "internal server error",

    })

}


return c.Status(fiber.StatusCreated).JSON(fiber.Map{


    "message": "User created successfully",

})


查看完整回答
反对 回复 2022-10-10
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信