2016-09-28 16 views
1

私は新しいとsqlxに行きました。私はstrutscanにマスター - >詳細ジョイン句を1つのクエリで持てるかどうかを知りたいと思います。sqlx structscan join query

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) 
     } 
    } 

ありがとう:私はすべての患者を照会すると、各患者の構造体にこのような

何かをエピソード配列を埋め込むように、患者は、多くのエピソードを持っています。

+0

https://github.com/jmoiron/sqlx/blob/master/sqlx_test.go#L470 – molivier

+0

ありがとう@molivier、私はそれを試してみましたが、#mpmはそれが1つでしか動作しないと言います1つの関係に。エピソード配列には挿入されません。 – mattinsalto

答えて

1

database/sqlまたはsqlxはオブジェクト・リレーショナル・マッパーではないので、タイプ[]Episodesの「埋込み」方法はわかりません。 sqlxは "structName.fieldName"構文を持つ親構造体内の単一の構造体フィールドを割り当てることができますが、それだけです。すべての行を取ることができず、何が何であるかを知り、Episodesをすべて正しいPatientに割り当てます。それにはORMが必要です。