2016-04-05 3 views
0

При использовании "по умолчанию" первичного ключа именования: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() работы в этом случае?

ответ

0

Обнаружена проблема. Ниже приведены исправленные структуры:

type Person struct { 
    PersonId int `gorm:"primary_key"` 
    Name  string 
    Emails []Email `gorm:"ForeignKey:PersonRefer"` 
} 

type Email struct { 
    EmailId  int `gorm:"primary_key"` 
    Person  Person 
    PersonRefer int `gorm:"column:person_id"` 
} 

conn.DB.First(&person).Related(&person.Emails, "PersonRefer") 

 Смежные вопросы

  • Нет связанных вопросов^_^