FirstOrCreate
获取第一个匹配的记录,或创建一个具有给定条件的新记录(仅适用于struct, map条件)
db.Where(User{Name: "Jinzhu"}).FirstOrCreate(&user)
代码案例:
func (tsu *TopicSignUp) TopicSignUpCreate() (bool, int64) { db := Db.Where(tsu).FirstOrCreate(&tsu) if err := db.Error; err != nil { return false, 0 } //返回执行结果受影响的行数 return true, db.RowsAffected }
补充:gorm踩坑:软删除与某个字段的唯一性
有一个user_infos表,用户名唯一。我在model定义user_name的时候已经使用gorm的tag标记为unique_index。类似如下:
type UserInfo struct { Id uint `json:id` Created_at tine.Time `josn:"created_at"` Updated_at time.Time `json:"updated_at"` DeletedAt *time.Time `json:"deleted_at"` UserName string `gorm:"unique_index, not null" json:"user_name"` }
需求如下:
这个用户允许删除,但是又不能真正从db删掉。
gorm的model如果有deleted_at字段,会默认执行软删除。所谓的软删除也就是把deleted_at置为当前时间,该记录并不会从db删除。
gorm查询的时候,如果你有仔细查看打印的sql语句。你会发现,每个查询语句都会有一个自带的条件:
where deleted_at is null
也就是说,gorm查询的时候是不会去查询那些已经被软删除的记录的,哪怕你在你的查询语句里面手动加上
where deleted_at is not null
也是无法查询到的,我试过了,你也可以试试。这也就是软删除的作用,查询是查不到的。
那么问题就来了,我的user_infos表要求用户名唯一。每次Create记录的时候,如果之前已经存在一条已经被软删除的记录,并且被软删除的记录的user_name与当前新增的记录的user_name相同,那么会无法新增成功。
报错类似如下(因为昨天在公司遇到的,今天周末在家整理,无法上图,等周一可以再来上图)。
duplicate key for ...
其实问题就出在软删除的记录那里。
解决:
为了保证以后这条被软删除的记录还能找到(硬删除就真的再也找不到了),于是就在执行软删的时候不调用Delete方法,而是调用Update方法,设置deleted_at为当前时间,并且把需要保持唯一性的字段,比如我这里的用户名,在原来的用户名后面加了个时间标记。
如以前的用户名是张三,现在我删除的时间是2018-09-15 11:13:06 ,那么我最终将需要删掉的这条记录的用户名设置为张三2018-09-15 11:13:06。
当然这只是个标记而已,你也可以添加你自己的标记,反正最终目的就是为了保证以后这条记录能被找到。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- RonaldBrautigam,PeterMasseursandConcertgebouwOrchestraAmsterdam-ShostakovichTheJazz
- 筷子兄弟《老男孩》[WAV+CUE][899M]
- 陈曦《寂寞在唱歌HQCD》2023头版限量编号[WAV+CUE][1G]
- 张惠妹《阿密特》NEW XRCD[WAV+CUE][455M]
- 邓伟标《西游记之悟空》24K金碟限量编号首版[低速原抓WAV+CUE]
- 群星《2024好听新歌40》AI调整音效【WAV分轨】
- 张梦弘《大城小爱HQ》头版限量编号[低速原抓WAV+CUE]
- 张敬轩《MY 1ST COLLECTION》2CD[WAV+CUE][1.7G]
- 张玮伽《夜归人HQⅡ》2024头版限量编号[WAV+CUE][523M]
- 证声音乐图书馆《夏至 爵士境地》[320K/MP3][70.37MB]
- 孙露《同名专辑》限量1:1母盘直刻[低速原抓WAV+CUE]
- 【宝丽金唱片】群星《鼓舞飞扬》WAV+CUE
- 莫扎特弗雷德沃夏克肖斯塔科维奇《钢琴五重奏》(DG24-96)FLAC
- 证声音乐图书馆《夏至 爵士境地》[FLAC/分轨][360.16MB]
- 证声音乐图书馆《日落琴声 x 弦乐》[320K/MP3][71.2MB]