Внешние ключи GORM без встроенной структуры

Итак, используя 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
}

Судя по вашему комментарию о «дезинфекции при разработке API REST», похоже, что вы демаршалируете ненадежные данные прямо в свои структуры GORM. Если это так, я бы рекомендовал это изменить. Вы можете отделиться, создав соответствующие структуры для вызовов API и скопировав соответствующие значения одно за другим.

Hymns For Disco 31.03.2021 01:05

Да, это то, что я делаю, когда говорю «санация». Моя цель состояла в том, чтобы не создавать вторичную структуру только для этого ...

rdnobrega 31.03.2021 01:24

Мое предложение было сделано на том основании, что в обмен на создание нового кода для разделения вы создаете более стабильную и эффективную модель безопасности. Ваш текущий подход, похоже, заключается в том, чтобы исключить все пути, по которым вредоносные данные могут попасть в ваш ORM. Это аналогично устранению всех утечек, и ваш текущий вопрос может быть лишь одной утечкой из многих. Кроме того, он создает скрытую взаимозависимость между вашими вызовами API и вашими определениями ORM, при этом изменения одного из них могут создать уязвимости в другом. Если вы явно скопируете ограниченный набор полей, обе эти проблемы будут устранены.

Hymns For Disco 31.03.2021 02:39

Также я не хочу здесь слишком резко критиковать ваш код. Я просто делюсь своим мнением, потому что мне нравится обсуждать, и я надеюсь, что смогу поделиться чем-то, что вы сочтете ценным. Если нет, то ничего страшного.

Hymns For Disco 31.03.2021 02:43

Вы как бы неправильно используете термин «встраивание», который имеет важное значение в Go, особенно когда вы говорите о встраивании одной структуры в другую.

meagar 31.03.2021 02:56

Привет, @HymnsForDisco, спасибо, что поделились своим подходом. Я говорю о том, что даже при создании новых структур мне все равно нужно очищать входящие данные. Итак, включение массива в мою модель / структуру только для установления реляционной связи между таблицами не очень эффективно. Моя цель - не загружать этот массив всегда. Я понял ваше решение, и оно действительно хорошо работает, я просто ожидал, что у gorm будет другой способ реализации внешних ключей, помимо необходимости иметь типизацию боковой структуры для отношений ... Спасибо!

rdnobrega 31.03.2021 04:50

Привет, @meagar! Да, я неправильно использовал терминологию. На самом деле я имел в виду, что моя структура содержит внутри другую структуру, которая вообще не встроена. Простите.

rdnobrega 31.03.2021 04:51
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
7
39
0

Другие вопросы по теме