Как вставить / найти строки, связанные внешними ключами из разных таблиц, с помощью Sequelize?

0

Я думаю, что сделал достаточно исследований по этому вопросу, и у меня только головная боль.

Вот что я сделал и понял: я реструктурировал свою базу данных MySQL, чтобы сохранить свои пользовательские данные в разных таблицах, я использую внешние ключи. До сих пор я только пришел к выводу, что внешние ключи используются только для согласованности и контроля, и они не автоматизируют и не делают что-либо еще (например, чтобы вставлять данные о том же пользователе в две таблицы, мне нужно использовать два отдельных оператора insert и внешний ключ не поможет сделать это иначе или автоматическим в некотором роде).

Хорошо. Вот что я хочу сделать: я хочу использовать Sequelize для вставки, обновления и извлечения данных из всех связанных таблиц сразу, и я не имею абсолютно никакого представления о том, как это сделать. Например, если пользователь регистрируется, я хочу иметь возможность вставлять данные в таблицу "A", содержащие некоторую пользовательскую информацию, и в той же самой задаче вставить в таблицу B некоторые другие данные (например, пользовательские настройки в выделенной таблице или без разницы). То же самое с retrievals, я хочу иметь возможность получить объект (или массив) со всеми связанными данными из разных таблиц, соответствующих критериям, которые я хочу найти.

Sequelize документация охватывает вещи таким образом, что каждая вещь зависит от предыдущей, а Sequelize довольно раздута с большим количеством вещей, которые мне не нужны. Я не хочу использовать.sync(). Я не хочу использовать миграции. У меня уже создана структура моей базы данных, и я хочу, чтобы Sequelize присоединялся к ней.

Можно ли вставлять и извлекать несколько строк, связанных в одно и то же время, и получать/использовать одну команду/объект Sequelize? Как?

Опять же, по "связанным данным" я имею в виду данные, "связанные", разделяя один и тот же внешний ключ.

Теги:
sequelize.js

1 ответ

0
Лучший ответ

Можно ли вставлять и извлекать несколько строк, связанных в одно и то же время, и получать/использовать одну команду/объект Sequelize? Как?

Да. Вам нужна активная загрузка.

Посмотрите следующий пример

const User = sequelize.define('user', {
  username: Sequelize.STRING,
});

const Address = sequelize.define('add', {
  address: Sequelize.STRING,
});

const Designation = sequelize.define('designation', {
  designation: Sequelize.STRING,
});

User.hasOne(Address);
User.hasMany(Designation);

sequelize.sync({ force: true })
  .then(() => User.create({
    username: 'test123',
    add: {
      address: 'this is dummy address'
    },
    designations: [
      { designation: 'designation1' },
      { designation: 'designation2' },
    ],
  }, { include: [Address, Designation] }))
  .then(user => {
    User.findAll({
      include: [Address, Designation],
    }).then((result) => {
      console.log(result);
    });
  });

В console.log вы получите все данные со всеми связанными с ними моделями, которые вы хотите включить в запрос

  • 0
    Спасибо! Это именно то, что я хотел! :) Теперь я собираюсь бороться, чтобы решить проблемы, которые вызывает Sequelize путем множественного / сингулярного имен без какого-либо видимого смысла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню