Sequelize где запрос атрибута «один ко многим»? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть следующие таблицы в базе данных:

Users: id|name|age Hobbies: id|user_id|hobby

В дальнейшем у меня есть следующие ассоциации:

Users.hasMany(Hobbies) Hobbies.belongTo(Users)

Чтобы получить список пользователей вместе с их хобби, запрос выглядит следующим образом:

Users.findAll(include: [{model: Hobbies}])

Я сопоставляю результат запроса с объектом домена.

Результат запроса выглядит примерно так:

[{id: 1, name: 'John', age: 20, hobbies: ['fishing', 'running']}]

Я пытаюсь вернуть список пользователей, которые увлекаются рыбалкой.

Насколько я понимаю Я могу применить запрос where к самой ассоциации следующим образом:

Users.findAll(include: [{model: Hobbies, where: {hobby: 'fishing'}}])

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

Есть ли способ применить запрос where на уровне пользователя на основе их увлечений?

1 Ответ

1 голос
/ 10 марта 2020

Я думаю, вам нужно изменить тип соединения. По умолчанию Sequelize использует левое внешнее объединение при объединении двух моделей, но если вы измените его на внутреннее объединение, установив required в true, вы получите ожидаемые результаты -

Users.findAll(include: [{model: Hobbies, where: {hobby: 'fishing'}, required : true}])

Надеюсь, это поможет!

...