Неверная связь с одним ко многим - PullRequest
0 голосов
/ 23 мая 2018

У меня есть следующие структуры

type Store struct {
    StoreID   int    `gorm:"primary_key;AUTO_INCREMENT;not null"`
    Name      string `gorm:"not null"`
    Adress    string `gorm:"not null"`
    Manager   User   `gorm:"not null"`
    ManagerID int    `gorm:"foreignkey:ManagerID;not null"`
    Boxes     []Box
}

type Box struct {
    BoxID       int `gorm:"primary_key;AUTO_INCREMENT;not null"`
    StoreID     int `gorm:"not null"`
    Items       []Item
    Code        int    `gorm:"type:integer(13)"`
    Description string `gorm:"not null"`
}

func (s *Store) AddBox(b Box) error {
    err := db.Model(&s).Association("Boxes").Append(&b)
    return err.Error
}

И я запускаю тесты на указанной структуре с их функциями.Один из тестов выглядит так:

func TestStoreAddBox(t *testing.T) {
    b := Box{BoxID: 1}
    err := b.GetDetails()
    if err != nil {
        t.Errorf("Expected no #1 error but got %v", err)
    }
    s := Store{StoreID: 2}
    err = s.GetDetails()
    if err != nil {
        t.Errorf("Expected no #2 error but got %v", err)
    }
    err = s.AddBox(b)
    if err != nil {
        t.Errorf("Expected no #3 error but got %v", err)
    }
}

Теперь, если я начинаю свои тесты, я получаю следующую ошибку:

--- FAIL: TestStoreAddBox (0.00s)
    db100_test.go:371: Expected no #3 error but got invalid association Boxes for db100.Store

Кто-нибудь имеет представление, в чем здесь проблема?

1 Ответ

0 голосов
/ 24 мая 2018

Хорошо, получим, что кикер - это следующее предложение в документации GORM:

Чтобы определить множественное родство, должен существовать внешний ключ, имя внешнего ключа по умолчанию - имя типа владельца плюс его первичный ключ..

Так что в моем случае это будет

StoreStoreID

Так что мне пришлось изменить структуру вшей Store так, чтобы

type Store struct {
StoreID   int    `gorm:"primary_key;AUTO_INCREMENT;not null"`
Name      string `gorm:"not null"`
Adress    string `gorm:"not null"`
Manager   User   `gorm:"not null"`
ManagerID int    `gorm:"foreignkey:ManagerID;not null"`
Boxes     []Box  `gorm:"foreignkey:StoreID;association_foreignkey:StoreID"`
}
...