V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lbunderway
V2EX  ›  问与答

gorm 关联查询请教

  •  
  •   lbunderway · 2020-07-06 10:13:24 +08:00 · 2062 次点击
    这是一个创建于 1613 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有如下两张表

    type Activity_record struct {
    	BaseModel 
    	Activity_config_id int `json:"activity_config_id"`
    	Activity_config Activity_config `json:"ac" gorm:"goreignkey:Activity_config_id"`
    	Share_user_id int `json:"share_user_id"`
    	Receive_user_id int `json:"receive_user_id"`
    }
    
    
    type Activity_config struct {
    	BaseModel
    	Mgr_user_id int `json:"mgr_user_id"`
    	Type int8 `json:"type"`
    	User_restrict int8 `json:"user_restrict"`
    	Title string `json:"title"`
    }
    

    查询语句,用的 gorm:

    model.DB.Preload("Activity_config", func(query *gorm.DB) *gorm.DB {
    		return query.Select("id, type")
    	}).Select("activity_records.id,activity_records.activity_config_id").Find(&list)
    

    打印的 sql 语句: [2020-07-06 09:54:57] [1.00ms] SELECT activity_records.id,activity_records.activity_config_id FROM activity_records
    [2020-07-06 09:54:57] [0.99ms] SELECT id, type FROM activity_configs WHERE (id IN (35))

    返回数据:

    [
        {
            "id": 4,
            "activity_config_id": 35,
            "ac": {
                "id": 35,
                "type": 1
            }
        }
    ]
    

    但是看起来它执行了两次查询,又没有别的什么方式让生成如下的 sql 语句,并且返回数据结构如上面的结构:如

    select  ar.*, ac.* from activity_records ar inner join activity_configs ac on ac.id = ar.Activity_config_id 
    

    刚开始看 golang,大佬些指点下

    3 条回复    2020-07-06 11:05:24 +08:00
    wysnylc
        1
    wysnylc  
       2020-07-06 10:17:49 +08:00
    至少不是级联,join 就 join 吧
    lbunderway
        3
    lbunderway  
    OP
       2020-07-06 11:05:24 +08:00
    @pwli 谢谢,我去试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:38 · PVG 10:38 · LAX 18:38 · JFK 21:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.