Как сделать выборку данных из двух таблиц при помощи Sequelize?

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

Есть две таблицы:

users
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 2 | name2 |
+----+-------+

и

settings
+---------+-------+
| user_id | group|
+---------+-------+
| 1 |standart|
| 1 |Middle |
| 2 |Middle |
+---------+---------+

Пытался указать связь через
users.belongsTo(settings, {foreignKey: 'user_id', targetKey: 'id'})
и
users.belongsToMany(settings, { through: 'user_id' })

Выборку производил через

Model.users.findAll({
  attributes: ['name'],
  where: {
    id: {
      [Op.in]: arUserID
    }
  },
  include: [{
    model: Model.settings,
    attributes: ['group']
  }]
})


Таблицы объявил примерно следующим видом

Sequelize.define('settings',{ /* ... */ }, { tableName: 'settings'}


От БД хочу получить имя пользователя ( из таблицы `users` ) и его группу ( из таблицы `settings` ), но в моих вариантах создаётся некорректная строка запроса и добавляется несуществующее поле ( Unknown column 'settings.id' in 'field list' ).
  • Вопрос задан
  • 2387 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
settings.belongsTo(users); // в сеттингс появляется поле userId
Model.settings.findAll({
  include: [{
        model: Model.users,
        where:  {
           id: { [Op.in]: arUserID },
        },
   }],
});

user_id самому делать не нужно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы