2016-09-28 10 views
1

저는 sqlx와 새로운 것을 알고 있습니다. 하나의 쿼리에서 master -> detail join 절을 strutscan 할 수 있는지 알고 싶습니다.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은 하나만 작동한다고 말합니다. 하나의 관계에. 에피소드 배열을 채우지 않습니다. – mattinsalto

답변

1

database/sql 또는 sqlx는 객체 관계형 맵퍼가 아니며 사용자 유형 []Episodes을 "채우는"방법을 알지 못하기 때문에 작동하지 않습니다. sqlx는 "structName.fieldName"구문을 사용하여 상위 구조체 내에 단일 구조체 필드를 할당 할 수 있지만 그게 전부입니다. 모든 행을 가져갈 수는 없으며 무엇을 알고 정확히 Episodes을 모두 Patient에 할당하십시오. 이를 위해서는 ORM이 필요합니다.