Я работаю с двумя таблицами, в частности.Пользователи и Друзья.У пользователей есть куча информации, которая определяет пользователя, тогда как у друзей есть два столбца помимо идентификатора: user_id и friend_id, где они оба являются ссылкой на таблицу пользователей.
Я пытаюсь найти всех пользователейдрузьям нужно как можно меньше звонков в БД, и у меня в настоящее время есть 2. Один для извлечения идентификатора пользователя сначала из запроса, затем для друзей, где я сравниваю идентификаторы из первого вызова, а затем третий вызов, который передаетмассив друзей и найти их всех в таблице пользователей.Это уже кажется излишним, и я думаю, что с ассоциациями должен быть лучший способ.
Модификация таблиц, к сожалению, не вариант.
Одна вещь, которую я видел из "http://docs.sequelizejs.com/manual/querying.html#relations---associations"
Я пытался, но получил интересную ошибку .. при попытке повторно использовать фрагмент кода в ссылке в разделе "Отношения / ассоциации, я получаю" пользователь связан с друзьями несколько раз.Чтобы определить правильную связь, вы должны использовать ключевое слово «as», чтобы указать псевдоним ассоциации, которую вы хотите включить. "
const userRecord = await User.findOne({
where: { id }
})
const friendsIDs = await Friends.findAll({
attributes: ["friend_id"],
where: {
user_id: userRecord.id
}
}).then(results => results.map(result => result.friend_id));
const Sequelize = require("sequelize");
const Op = Sequelize.Op;
return await User.findAll({
where: {
id: { [Op.in]: friendsIDs }
},
});
Выше для моего случая использования работает. Мне просто интересно, есть лиЕсть способы сократить количество звонков в БД.