Итак, используя GORM, я понимаю, что для использования внешних ключей я должен встроить структуру в другую структуру, иначе gorm не распознает такую связь:
type People struct {
ID int
Name string
Card []Card
}
type Card struct {
ID int
Name string
PeopleID int
}
Но на самом деле мне не нужна эта система встраивания. Для меня становится более проблематичным проводить дезинфекцию при разработке REST apis. Итак, есть ли способ сообщить GORM об отношениях без необходимости встраивать структуру в другую? Нравиться:
type People struct {
ID int
Name string
//No `Card` object here
}
type Card struct {
ID int
Name string
PeopleID int `gorm:"foreignKey:People.ID` //Something like this
}
Да, это то, что я делаю, когда говорю «санация». Моя цель состояла в том, чтобы не создавать вторичную структуру только для этого ...
Мое предложение было сделано на том основании, что в обмен на создание нового кода для разделения вы создаете более стабильную и эффективную модель безопасности. Ваш текущий подход, похоже, заключается в том, чтобы исключить все пути, по которым вредоносные данные могут попасть в ваш ORM. Это аналогично устранению всех утечек, и ваш текущий вопрос может быть лишь одной утечкой из многих. Кроме того, он создает скрытую взаимозависимость между вашими вызовами API и вашими определениями ORM, при этом изменения одного из них могут создать уязвимости в другом. Если вы явно скопируете ограниченный набор полей, обе эти проблемы будут устранены.
Также я не хочу здесь слишком резко критиковать ваш код. Я просто делюсь своим мнением, потому что мне нравится обсуждать, и я надеюсь, что смогу поделиться чем-то, что вы сочтете ценным. Если нет, то ничего страшного.
Вы как бы неправильно используете термин «встраивание», который имеет важное значение в Go, особенно когда вы говорите о встраивании одной структуры в другую.
Привет, @HymnsForDisco, спасибо, что поделились своим подходом. Я говорю о том, что даже при создании новых структур мне все равно нужно очищать входящие данные. Итак, включение массива в мою модель / структуру только для установления реляционной связи между таблицами не очень эффективно. Моя цель - не загружать этот массив всегда. Я понял ваше решение, и оно действительно хорошо работает, я просто ожидал, что у gorm будет другой способ реализации внешних ключей, помимо необходимости иметь типизацию боковой структуры для отношений ... Спасибо!
Привет, @meagar! Да, я неправильно использовал терминологию. На самом деле я имел в виду, что моя структура содержит внутри другую структуру, которая вообще не встроена. Простите.
Судя по вашему комментарию о «дезинфекции при разработке API REST», похоже, что вы демаршалируете ненадежные данные прямо в свои структуры GORM. Если это так, я бы рекомендовал это изменить. Вы можете отделиться, создав соответствующие структуры для вызовов API и скопировав соответствующие значения одно за другим.