go-pg got не имеет отношения мысль на моем столе имеет отношение

#go #go-pg

#Вперед #go-pg

Вопрос:

у меня есть связь контактов с провинциями, и вот в моей структуре

     Contact struct {
        tableName       struct{}    `pg:"contacts,discard_unknown_columns"`
        ID              int         `json:"id"`
        Address         string      `json:"address"`
        BuildingType    string      `json:"building_type"`
        BuildingNumber  float64     `json:"building_number"`
        Province        *Province   `pg:"fk:province_id" json:"province"`
    }

    Province struct {
        tableName      struct{}         `pg:"provinces,discard_unknown_columns"`
        ID             int              `json:"id" pg:",pk"`
        Name           string           `json:"name"`
    }
  

и вот как я называю:

     var us Contact
    err = db.Model(amp;us).Relation("provinces").Where(
        "id = ?", 3,
    ).Select()
  

то, что я делаю, model=Contact does not have relation="provinces"
как правильно запросить это с помощью go-pg?

когда я меняю тег в контакте на провинцию с тегом pg:"rel:has-one"

я получил эту ошибку pg: Contact has-one Province: Contact must have column province_id (use fk:custom_column tag on Province field to specify custom column)

примечание: я не использую их миграцию, я использую sql-migration для всех миграций

Ответ №1:

Как указано в ошибке и документах, вам необходимо иметь province_id столбец на Contact :

 Contact struct {
    tableName       struct{}    `pg:"contacts,discard_unknown_columns"`
    ID              int         `json:"id"`
    Address         string      `json:"address"`
    BuildingType    string      `json:"building_type"`
    BuildingNumber  float64     `json:"building_number"`
    ProvinceId      int         
    Province        *Province   `pg:"rel:has-one" json:"province"`
}
  

Если ваше имя столбца ref не является, province_id тогда вы можете использовать другой столбец и добавить fk:custom_column к нему.

Ответ №2:

В вашей провинции отсутствует внешний ключ, попробуйте это, я думаю, это сработает.

 Contact struct {
    tableName       struct{}    `pg:"contacts,discard_unknown_columns"`
    ID              int         `json:"id"`
    Address         string      `json:"address"`
    BuildingType    string      `json:"building_type"`
    BuildingNumber  float64     `json:"building_number"`
    Province        *Province   `pg:"fk:contact_id" json:"province"`
}

Province struct {
    tableName      struct{}         `pg:"provinces,discard_unknown_columns"`
    ID             int              `json:"id" pg:",pk"`
    Name           string           `json:"name"`
    ContactID      int              `pg:"on_delete:CASCADE,notnull"`
}