Gorm select 表里所有数据包括已经软删除的数据

文章目录

    又写了一天的 bug … 被 ORM 折腾死。

    没关系,又活了一天,已经很厉害了。。。

    Bug 的根源

    一个设备信息管理系统的表,里面会自动给设备生成设备 ID。

    格式:

    • 前6位为生产如期,如:211207,代表 2021年12月7日生产。
    • 后3位为生产编号,如:001,代表当日生产的第一台设备。

    编号的生成逻辑:
    - sql like 取最新的一条 满足 211207 的记录,如果有,就判断最后三位 + 1
    - 没有,就生成一条 001

    这个逻辑跑了很久都没有出问题,但是今天在写一个新系统时,我偷懒 copy 过来了。

    然后,另一个 bug 导致几条设备信息被软删除 (gorm 默认是使用软删除)。

    于是获取到的最新一条记录,实现并不是最新的记录,因为隐藏了被软删除的设备记录。而设备 ID 又加了唯一索引,于是就再也插不进新的设备信息了。。。

    gorm Unscoped

    解决方法是加上 Unscoped

    db.Unscoped().Where("age = 20").Find(&users)
    

    这样无论是软删除的,还是没删除的,都能获取到。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式