sqlx structscan присоединиться к запросу

Я новичок в разработке и sqlx, и я хотел бы знать, возможно ли в Strutscan предложение соединения master -> detail в одном запросе. У пациента много эпизодов, поэтому я хочу опрашивать всех пациентов и встраивать массив эпизодов в каждую структуру пациента

Что-то вроде этого:

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

Благодарю.

1 ответ

Решение

Это не сработает, так как база данных / sql или sqlx не являются объектно-реляционными мапперами и не знают, как "заполнить" ваш тип []Episodes, sqlx может назначать отдельные структурные поля в родительской структуре с помощью синтаксиса structName.fieldName, но это все. Он не может занять все ваши строки, знать, что к чему и назначить все Episodes правильно Patient, Вам нужен ORM для этого.

Другие вопросы по тегам