如何将PHP多表UPDATE SQL语句转为正确的GORM Golang查询?
解决GORM多表关联更新的问题
你遇到的问题是GORM默认使用Joins进行UPDATE操作时,不会保留多表关联结构,仅针对主表生成更新语句,导致关联条件丢失。以下是符合需求的正确写法:
db.Table("tbl1 AS A, tbl2 AS B").Where("A.field2 = B.field2 AND B.field3 = ?", var).Update("A.field1", "1")
说明
- 通过
Table直接指定两个关联表及其别名,GORM会生成与你原PHP SQL结构一致的多表UPDATE语句。 Where子句同时包含表关联条件A.field2 = B.field2和过滤条件B.field3 = ?,确保更新逻辑与原SQL完全匹配。- 该写法无需定义表对应的结构体,也不用
db.Exec()或db.Raw(),完全满足你的要求。
生成的SQL将与原PHP代码逻辑一致:
UPDATE tbl1 AS A, tbl2 AS B SET `A`.`field1` = '1' WHERE A.field2 = B.field2 AND B.field3 = ?;
内容的提问来源于stack exchange,提问作者Uday Bhargav
相关产品推荐
相关产品推荐

