首页 > 数据库 >使用 grom 后所有操作数据库的代码都使用同一个表-链式调用

使用 grom 后所有操作数据库的代码都使用同一个表-链式调用

时间:2023-05-06 19:55:47浏览次数:58  
标签:articles 调用 err grom 代码 使用 db 链式

在写业务代码的时候一位同事写代码是这样的


func (p *PromptRepo) GetArtPrompt(ctx context.Context, options ...func(option *gorm.DB)) (articles []*model.ArticlePrompt, err error) {

	p.db = p.db.Table(model.ArticlePrompt{}.TableName())
	for _, option := range options {
		option(p.db)
	}

	err = p.db.Find(&articles).Error
	if err != nil {
		p.log.WithContext(ctx).Errorf("GetArtPrompt-err.%+v", err)
		return nil, err
	}
	return articles, nil
}

然后不可思议的事情就来了。竟然是链式调用的,也就是说 日志打印的SQL是

SELECT * FROM article_prompt WHERE name = 'xxx' AND age = 18 AND age = 28;

咋一看也不对。第二次的结果会把第一次的条件给拼上去,这就有点匪夷所思了。

新初始化的 *gorm.DB 或调用 新建会话方法 后,GORM 会创建新的 Statement 实例。因此想要复用 *gorm.DB,需要确保它们处于 新建会话模式,例如:

即把第一行的代码改为


db := p.db.WithContext(ctx).Table(model.ArticlePrompt{}.TableName())

参考
链式调用
使用 grom 后所有操作数据库的代码都使用同一个表-链式调用

标签:articles,调用,err,grom,代码,使用,db,链式
From: https://www.cnblogs.com/zrds/p/17378338.html

相关文章

  • 眼见未必为实--如何避免VMware平台ESXi主机CPU使用率的“坑”?
    原文:https://www.modb.pro/db/621136眼见未必为实--如何避免VMware平台ESXi主机CPU使用率的“坑”?前言在实际运维中经常会遇到这样的情况,VMWARE虚拟化平台ESXi主机物理CPU及内存使用率较低,但是还是有用户感觉慢。虚拟化平台通过client看到的ESXi主机CPU的使用率的参考价值有多......
  • 解决idea2020版本无法使用actiBPM插件问题
    下载由于在idea自带的插件商店中搜索不到此插件,所以我们需要去官网下载:地址:JetBrainsMarketplace原因是2020版之后不兼容此插件了点击下载:然后使用压缩软件打开此jar包,编辑META-INF/pluign.xml文件:找到我用红色框圈出来的地方记下自己idea的版本号:按照下图......
  • 使用Python扩展PAM(part 1)
    0、使用Python扩展PAM实现一些额外的功能,比如ssh、vpn等二次验证。1、准备工具实现这个功能需要用到pam_python pam-python 注意!是pam-python不是python_pamPam-python是一个开源的Python模块,用于编写自定义PAM模块。Pam-python使用Python脚本来扩展PAM功能。它使用Cython和Pyt......
  • Bing的AI聊天使用体验
    Bing开启了AI聊天功能,我们这里做一个简单的测评,看看各种AI是否达到预期效果。PS:没有“魔法”的各位就不用看下去了1.登陆打开edge,遇到的第一个问题就是,使用“魔法”后,登陆报错0x80190001(不登录每天的聊天次数有限)搜索资料后发现一个好用的解决方式,下载fiddler,打开win......
  • 【Redis】-使用Lua脚本解决多线程下的超卖问题以及为什么?
    一.多线程下引起的超卖问题呈现1.1.我先初始化库存数量为1、订单数量为01.2.开启3个线程去执行业务业务为:判断如果说库存数量大于0,则库存减1,订单数量加1结果为:库存为-2,订单数量为3原因:如下图所示,这是因为分别有6个指令(3个库存减1指令,3个订单数量加1指令)在redis服务端执行导致......
  • leveldb无法在wsl1中使用
    1、WSL1不支持FUSE文件系统,因此无法在WSL1中直接使用LevelDB。LevelDB使用FUSE来提供基于文件的存储,因此在WSL1中无法正常运行。但是,您仍然可以在WSL1上使用Leveldb的API,只需将数据存储在本地文件系统中即可。这意味着您需要使用本地Windows文件系统或其他支持......
  • 接口自动化 测试数据驱动 DDD模块使用
    一、DDT简单介绍名称:Data-DrivenTests,数据驱动测试作用:由外部数据集合来驱动测试用例的执行核心的思想:数据和测试代码分离应用场景:一组外部数据来执行相同的操作优点:当测试数据发生大量变化的情况下,测试代码可以保持不变实际项目:excel存储测试数据,ddt读取测试数据到单元......
  • 开始使用操作系统
    操作系统使用分为两类(图形化)and(命令行)•图形化:使用操作系统提供的图形化页面,以获得图形化反馈的形式去使用操作系统。•命令行:使用操作系统提供的各类命令,以获得字符反馈的形式去使用操作系统。使用Linux操作系统,多数都是使用的:命令行因为在开发中,使用命令行形式,效率更高,更加......
  • 记一次使用laravel-snappy把g2和plotly.js图生成pdf踩坑经历
    最近有一个需求,需要把页面上的echarts等js组件生成的图表放到pdf中。使用laravel框架,找到了laravel-snappy这个包,其底层是使用wkhtmltopdf来生成pdf。因为有把数据点都画到箱型图上的需求,找到了plotly.js这个组件,功能还是很强大的,可以轻松实现如下的效果 页面都没问题,然使用lar......
  • linux 下安装和使用Elasticsearch8+php的操作
    首先安装Elasticsearch8版本不需要jdk环境,就是JVAV的环境,他本身的压缩文件里就包含了固定的jdk去官网1、下载Elasticsearch的官方地址:https://www.elastic.co/cn/下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch我这里下载的是elasticsearch-8.......