Golang Go语言中 gorm 在用 JOIN 时, 怎么不让其他的条件给加进来
Golang Go语言中 gorm 在用 JOIN 时, 怎么不让其他的条件给加进来
tx := g.DB.Model(&list).Where(“user_id = ?”, “1”)
tx = tx.Joins(“inner join orders on orders.shop_id = ?”, “123”)
tx.Where(“item_id = ?”, “111”)
如上面代码, tx.Joins 生成的连表, 我只想要我写的那个条件, gorm 还会把user_id
和tem_id
也给加进去
更多关于Golang Go语言中 gorm 在用 JOIN 时, 怎么不让其他的条件给加进来的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你是不是配置了外键什么的在 model struct 上
更多关于Golang Go语言中 gorm 在用 JOIN 时, 怎么不让其他的条件给加进来的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
外键我都没关闭的, 全靠引用来关联数据
唔,我眼花了,你明明自己写了俩条件进去,GORM 肯定有啊
你自己写了两个 where 啊?去掉不就好了吗??
直接写 raw sql 吧
user_id 和 tem_id 是主表的条件?那就在字段前面加上表名:XXTable.user_id ,还有最好是把那两个字段放在 join 后面。
把它变成 raw sql 看看做了什么
在Golang中使用GORM进行数据库操作时,JOIN查询是一个常见的需求。当你希望在执行JOIN操作时,不希望自动添加其他条件(例如默认的WHERE子句),你可以通过几种方式来实现这一目标。
-
手动编写JOIN查询: GORM允许你使用原生SQL进行查询。你可以通过
DB.Raw
或DB.Exec
方法直接编写SQL语句,这样可以完全控制JOIN的逻辑,避免GORM自动添加条件。 -
使用Preload但排除条件: 如果你使用
Preload
进行关联加载,GORM会自动添加条件来匹配关联关系。此时,你可以考虑将Preload
替换为手动JOIN,并在JOIN后使用Select
指定需要的字段,避免额外的条件。 -
自定义查询逻辑: 在GORM中,你可以通过链式调用构建查询。如果某些条件是由GORM自动添加的,你可以通过
Unscoped()
方法来取消全局作用域的影响,或者通过Where("1=1")
这样的恒真条件来“重置”WHERE子句,然后手动添加你需要的条件。 -
分步骤执行: 将查询分解为多个步骤,首先执行JOIN查询获取基础数据,然后根据需要在Go代码中进一步过滤和处理数据。
总之,在GORM中执行JOIN查询时,你可以通过手动编写SQL、调整查询逻辑或使用原生方法等方式来避免自动添加的条件。选择哪种方法取决于你的具体需求和查询的复杂性。