Go sqlx structscan连接查询
我是go和sqlx新手,我想知道是否可以在一个查询中构造一个master->detail连接子句。一个患者有很多发作,所以我想查询所有患者,并在每个患者结构中嵌入一个发作数组 大概是这样的:Go sqlx structscan连接查询,go,sqlx,Go,Sqlx,我是go和sqlx新手,我想知道是否可以在一个查询中构造一个master->detail连接子句。一个患者有很多发作,所以我想查询所有患者,并在每个患者结构中嵌入一个发作数组 大概是这样的: type Episode struct { EpisodeID int `db:"episode_id"` PatientID int `db:"patient_id"` Status string `db:"status"` }
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不是对象关系映射程序,而且不知道如何“填充”您的类型
[]所以它不起作用。sqlx可以使用“structName.fieldName”语法在父结构中分配单个结构字段,但仅此而已。它不能占用您的所有行,知道什么是什么,并将所有剧集
分配给正确的患者
。你需要一个ORM。看看:谢谢@molivier,我试过了,但正如mpm所说,它只适用于一对一的关系。它不填充数组。