登录
首页 >  Golang >  Go问答

Gorm 所属关系的子查询构建方法详解

来源:stackoverflow

时间:2024-02-12 19:39:23 372浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《Gorm 所属关系的子查询构建方法详解》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我在 go 中使用 gorm 进行 mysql 查询。我有以下结构

type patient struct {
    gorm.model
}


type clinicaltrialpatient struct {
    gorm.model
    patientid uint
    patient patient
}

我想生成一个 sql 语句,例如

select * from `clinical_trial_patients` where patient_id in (select id from patients where pvs_pat_id = '1' and deleted_at is null) and `clinical_trial_patients`.`deleted_at` is null

不幸的是,我不明白如何生成这样的语句。我正在尝试这样的事情:

result := orm.where(&clinicaltrialpatient{
        patient: patient{ 
            pvspatid: "1",
        },
    }).find(&trialpatients)

但是生成了以下语句

SELECT * FROM `clinical_trial_patients` WHERE `clinical_trial_patients`.`deleted_at` IS NULL

正确答案


您可以使用Preload来做归属关系。

type patient struct {
    gorm.model
    clinicaltrialpatients []clinicaltrialpatient // add this field
}


type clinicaltrialpatient struct {
    gorm.model
    patientid uint
    patient patient
}

...

var result patient

err := orm.preload("clinicaltrialpatients").first(&result, 1).error
if err != nil {
    panic(err)
}

fmt.println(result.clinicaltrialpatients)

...

或者根据您的问题,您可以像这样使用 sub-query

    pvsPatId := "1"

    err := orm.
        Where(
            "patient_id in (?)",
            db.Table("Patients").
                Select("id").
                Where("pvs_pat_id = ?", pvsPatId),
        ).
        Find(&trialPatients).Error
    if err != nil {
        panic(err)
    }

好了,本文到此结束,带大家了解了《Gorm 所属关系的子查询构建方法详解》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>