GO gorm踩坑记


一. 软删除问题

  1. 问题描述

    gorm调用delete删除数据时,默认底层调用update方法,将delete_at设置为当前时间

    user表中name字段为唯一,这个用户允许删除

    每次Create记录的时候,如果之前已经存在一条已经被软删除的记录,并且被软删除的记录的name与当前新增的记录的name相同

    那么在验证name是否存在的时候,select 就无法查到被软删除的记录,导致验证通过了新增失败的问题

  2. 解决方案:

    两种解决方案: Unscoped()

    2.1. 物理删除: 

db.Unscoped().Where("id = ?", 1).Delete(&User{})

    2.2. 筛选查询:

db.Unscoped().Where("name=?", name).Find(&User{})

 

二. 分页问题

  1. 问题描述:

db.Where().Find(&data).Limit(limit).Offset(offset).Count(&total) // 这段代码会出现奇怪的错误:总条数查不到等等

  2. 解决方案

db.Where().Find(&data).Count(&total).Limit(limit).Offset(offset) // 将Count 放在 分页前

三. 查询问题

  1. 问题描述: 

db.First(&User{})  // 如果没有记录则会返回error: RecordNotFound
db.Find(&User{})  // 如果没有记录则会返回error: RecordNotFound

  2. 解决方案

  两种解决方案:

  2.1. 接受err并判断err是否为 RecordNotFound

  2.2. 传递切片:

var user []User
db.Find(user)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM