2016-09-28 249 views
1

我是新來的sqlx,我想知道它是否適用於strutscan的master - > detail join子句。病人有許多情節,所以我想查詢所有患者和每個病人結構中嵌入一個小插曲陣列sqlx structscan join查詢

事情是這樣的:

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說它只能用於一個到一個關係。它不會填充劇集數組。 – mattinsalto

回答

1

它不會工作,因爲數據庫/ sql或sqlx不是對象關係映射器,也不知道如何「填充」您的類型[]Episodes。 sqlx可以使用「structName.fieldName」語法分配父結構體中的單個結構體字段,但就是這樣。它不能取所有的行,知道是什麼,並將所有Episodes分配到正確的Patient。你需要一個ORM。