Как обновить вложенные таблицы в SQL с помощью Gorm? - PullRequest
0 голосов
/ 31 августа 2018

Здесь код написан на Go. Я использую две таблицы, где одна таблица имеет внешний ключ, который ссылается на первичный ключ другой таблицы. Допустим, у меня есть база данных следующей структуры:

   type User struct{
       ID uint `gorm:"primary_key;column:id"`
       Name string `gorm:"column:name"`
       Place place
       PlaceID
   }

   type Place struct{
       ID uint `gorm:"primary_key;column:id"`
       Name string `gorm:"column:name"`
       Pincode uint `gorm:"column:pincode"`
   }

И схема sql:

create table place(
    id int(20) NOT NULL AUTO_INCREMENT,
    name varchar(100) NOT NULL,
    pincode uint(20) NOT NULL,
    PRIMARY KEY (id),
)

create table user(
    id int(20) NOT NULL AUTO_INCREMENT,
    name varchar(100) NOT NULL,
    place_id uint(20) NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (place_id) REFERENCES place(id)
)

Теперь при вставке в пользователя gorm как:

  place := Place{Name:"new delhi",Pincode:1234}
  user := User{Name: "sam", Age: 15, Place: place}
  err = db.Debug().Create(&user).Error

  //It  inserts to both user and place table in mysql
  //now while updating to name in user table as Samuel and place as 
  //following

  place := Place{Name:"mumbai",Pincode:1234}
  err = db.Debug().Model(&User{}).Where("id =?", 
   1,).Update(&user{Name:"Samuel",Place:place}).Error

Он обновляет строку в таблице пользователей, но создает новую строку в таблице мест. Но он должен обновить соответствующую строку в таблице мест, а не создавать новую

Есть ли способ сделать это? Здесь я не использую функцию автоматического переноса для создания таблиц БД.

...