#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"`
}