При использовании "по умолчанию" первичного ключа именования:GO GORM. Реле() конструктор не работает с именами первичных ключей, отличных от дефолта.
Postgres таблицы
CREATE TABLE person
(
id SERIAL,
name varchar(255) NOT NULL,
CONSTRAINT person_pk PRIMARY KEY (id)
)
CREATE TABLE email
(
id SERIAL,
person_id int NOT NULL REFERENCES person(id),
CONSTRAINT email_pk PRIMARY KEY (id)
)
Это .Related() конструкция отлично работает на примерах:
type Person struct {
ID int
Name string
Emails []Email
}
type Email struct {
ID int
PersonID int
}
person := models.Person{}
conn.DB.First(&person).Related(&person.Emails)
Но при использовании не- имена первичных ключей по умолчанию, пример не работает. Только одно электронное письмо добавляется в электронную почту независимо от того, сколько из них существует.
CREATE TABLE person
(
person_id SERIAL,
name varchar(255) NOT NULL,
CONSTRAINT person_pk PRIMARY KEY (person_id)
)
CREATE TABLE email
(
email_id SERIAL,
person_id int NOT NULL REFERENCES person(person_id),
CONSTRAINT email_pk PRIMARY KEY (email_id)
)
type Person struct {
PersonId int `gorm:"primary_key"`
Name string
Emails []Email `gorm:"ForeignKey:PersonId"`
}
type Email struct {
EmailId int `gorm:"primary_key"`
PersonId int
}
person := models.Person{}
conn.DB.First(&person).Related(&person.Emails)
мне пришлось прибегнуть к помощи этой конструкции:
person := models.Person{}
conn.DB.First(&person)
conn.DB.Where("person_id = ?", person.PersonId).Find(&person.Emails)
Можно ли сделать .Related() работы в этом случае?