В частности, я работаю с двумя таблицами. Пользователи и друзья. У пользователей есть куча информации, которая определяет пользователя, тогда как у друзей есть два столбца, кроме id: user_id и friend_id, где оба они являются ссылкой на таблицу User.
Я пытаюсь найти всех друзей пользователей с помощью как можно меньшего количества обращений к базе данных, и в настоящее время у меня их 2. Один для получения идентификатора пользователя сначала из запроса, а затем другой для друзей, где я сравниваю идентификаторы из первый вызов, а затем третий вызов, который передает массив друзей и находит их всех в таблице пользователей. Это уже кажется излишеством, и я думаю, что с ассоциациями должен быть лучший способ.
Изменение таблиц, к сожалению, не вариант.
Одна вещь, которую я увидел на "http://docs.sequelizejs.com/manual/querying.html#relations---associations"
Я попытался, но получил интересную ошибку.. при попытке переназначить фрагмент кода в ссылке в разделе «Отношения/ассоциации» я получаю сообщение «пользователь несколько раз связан с друзьями». Чтобы определить правильную связь, вы должны использовать ключевое слово «как», чтобы укажите псевдоним ассоциации, которую вы хотите включить».
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 }
},
});
Выше для моего варианта использования работает. Мне просто интересно, есть ли способы сократить количество обращений к БД.