Search code examples
gogo-pg

Specify key for many-to-many relationship in go-pg ORM


I have these 2 models with many-to-many relationship:

type Person struct {
    tableName    struct{}   `sql:"person"`
    UUID         string     `sql:"person_uuid,pk"`
    ContactDatas []ContactData `pg:",many2many:person_contact_data,joinFK:"`
}

type ContactData struct {
    tableName     struct{}   `sql:"contact_data"`
    UUID          string     `sql:"contact_data_uuid,pk"`
}

And model for person_contact_data table is:

type PersonContactData struct {
    tableName       struct{} `sql:"person_contact_data"`
    PersonUUID      string   `sql:"person_uuid"`
    ContactDataUUID string   `sql:"contact_data_uuid"`
}

If joinFK in ContactDatas struct tag is empty go-pg adds underscore under the hood, so generated SQL part looks like this: WHERE ("contact_data"."contact_data_uuid" = person_contact_data."_contact_data_uuid").

Is there a way to specify joining keys completely manual?


Solution

  • I was using version 5. In latest version this was fixed, now you can specify full joining keys:

    type Person struct {
        tableName    struct{}   `sql:"person"`
        UUID         string     `sql:"person_uuid,pk"`
        ContactDatas []ContactData `pg:",many2many:person_contact_data,fk:person_uuid,joinFK:contact_data_uuid"`
    }