代码之家  ›  专栏  ›  技术社区  ›  Jonathan Eustace

如何使用go pg查询一对多关系

  •  0
  • Jonathan Eustace  · 技术社区  · 6 年前

    我想查询一对多关系。我有以下结构:

    type AppointmentsParticipants struct {
        AppointmentsID int `sql:",pk"`
        UserID int `sql:",pk"`
        Approved bool
        ReviewedAt time.Time
        ReviewedBy int
        Comment string
        Cancelled bool
    
    }
    
    type Appointments struct {
        ID int `sql:",pk"`
        Pending bool
        StartTime time.Time
        EndTime time.Time
        auditData
        InitialAppointmentID int
        SessionID string
        Type string
        AppointmentParticipants []*AppointmentsParticipants `json:"participants"`
    }
    

    var app Appointments
    err = database.DB().
            Model(&app).
            Column("*").
            Where("appointments_participants.user_id = ?", id).
            Join("JOIN appointments_participants ON appointments.id = appointments_participants.appointments_id").
            Select()
    

    这将返回Appoints结构的所有值,AppointmentParticipants切片除外。它返回一个空切片。我接受了go pg编写的查询,并在psql中验证了它确实从appointment_参与者表返回了一条记录。

    {140 true 2018-09-01 00:00:00 +0000 UTC 2018-09-01 01:00:00 +0000 UTC {2018-08-15 22:52:11.326775 +0000 UTC 5 0001-01-01 00:00:00 +0000 UTC 0} 0 Session []}

    有趣的是,此查询确实返回了一个错误: pg: can't find column=appointments_id in model=Appointments 但是,我尝试使用struct标记来尝试并解决这个问题,但没有效果。

    1 回复  |  直到 6 年前
        1
  •  0
  •   asyndrige    6 年前

    尝试这样的查询:

    err = database.DB().
        Model(&app).
        Column("AppointmentsParticipants").
        Relation("AppointmentsParticipants", func(q *orm.Query) (*orm.Query, error) {
            return q.Where("user_id = ?", id), nil
        }).
        Select()
    

    如果它不起作用,尝试使用ID、它们的字段名和标记,go pg对此非常敏感。