Метод WhereHas в Sequelize

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

Скажем, мне нужно выбрать всех пользователей в группе с ID = 1, затем я могу использовать запрос ниже, но затем мне нужно извлечь пользователей из результатов.

let group = group.findOne({
  include: [{
    as: 'users',
    model: schema.users
  }],
  where: {
    id: groupId
  }
})

let users = group.users;

Есть ли такой метод, как WhereHas, который я мог бы использовать для создания запроса только для пользователей, а затем фильтровать их, используя связь с группами?

let users = group.findAll({
  whereHas: [{
    as: 'groups',
    model: schema.groups,
    where: {
      id: groupId      // something like this, group is used for filtering only
    }
  }]
})
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Laravel поставляется с мощной функцией под названием "Eloquent Accessors and Mutators".
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
1
0
481
1

Ответы 1

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

let users = users.findAll({
  include: [{
    as: 'groups',
    model: schema.groups,
    required:true,
    where: {
      id: groupId      
    }
  }],
})

С моей стороны это не работает. Он по-прежнему фильтрует все строки без совпадения по идентификатору

Yves Gonzaga 07.06.2020 17:18

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