gpt4 book ai didi

go - sqlx structscan 连接查询

转载 作者:IT王子 更新时间:2023-10-29 01:41:55 25 4
gpt4 key购买 nike

我是 sqlx 的新手,我想知道它是否可以在一个查询中对 master -> detail 连接子句进行 strutscan。一位患者有很多发作,所以我想查询所有患者并在每个患者结构中嵌入一个发作数组

像这样:

type Episode struct {
EpisodeID int `db:"episode_id"`
PatientID int `db:"patient_id"`
Status string `db:"status"`
}

type Patient struct {
PatientID int `db:"patient_id"`
FirstName string `db:"first_name"`
MiddleName sql.NullString `db:"middle_name"`
LastName string `db:"last_name"`
Episodes []Episode
}

query := `SELECT
mr_patients.patient_id,
mr_patients.first_name,
mr_patients.middle_name,
mr_patients.last_name,
mr_episode_statuses.status,
mr_episodes.episode_id,
mr_episodes.created_at
FROM mr_patients
INNER JOIN mr_episodes ON mr_patients.patient_id = mr_episodes.patient_id
INNER JOIN mr_episode_statuses ON mr_episodes.status_id = mr_episode_statuses.status_id
ORDER BY mr_patients.patient_id, mr_episodes.episode_id`

rows, err := db.Queryx(query)

if err != nil {
log.Fatal(err)
}

var patients []Patient

for rows.Next() {
var p Patient
err = rows.StructScan(&p)
if err != nil {
log.Fatalln(err)
} else {
patients = append(patients, p)
}
}

谢谢。

最佳答案

它不会工作,因为 database/sql 或 sqlx 不是对象关系映射器,并且不知道如何“填充”您的类型 []Episodes。 sqlx 可以使用“structName.fieldName”语法在父结构中分配单个结构字段,仅此而已。它无法获取所有行,知道什么是什么并将所有 Episodes 分配给正确的 Patient。为此,您需要一个 ORM。

关于go - sqlx structscan 连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39739710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com