#javascript #mysql #sequelize.js
#javascript #mysql #sequelize.js
Вопрос:
Я использую Sequelize с Node MySQL.
У меня есть структура модели, подобная этой:
// models:
var Group, Issue, Invite;
// many Issues per Group
Group.hasMany(Issue);
Issue.belongsTo(Group);
// Groups can invite other Groups to work on their Issues
Issue.hasMany(Invite, {foreignKey: groupId});
Invite.belongsTo(Issue, {foreignKey: groupId});
Group.hasMany(Invite, {foreignKey: inviteeId});
Invite.belongsTo(Group, {foreignKey: inviteeId});
// given an Issue id, include all Invites invited Groups (inviteeId) - But how?
var query = {
where: {id: ...},
include: ???
};
Issue.find(query).complete(function(err, issue) {
var invites = issue.invites;
var firstInvitedGroup = issue.invites[0].group;
// ...
});
Возможно ли это вообще? Какие возможны обходные пути? Спасибо!
Ответ №1:
Sequelize Docs: вложенная нетерпеливая загрузка
Пример
Issue.find({
include: [
{
model: Invite,
include: [Group]
}
]
});
Ответ №2:
Если вы хотите быстро загрузить все вложенные ассоциации, используйте эту функцию.
Issue.find({
include:getNestedAssociations(Issue)
});
//Recursively load all bested associtiaons
function getNestedAssociations(_model) {
const associations = [];
for (const association of Object.keys(_model.associations)) {
const model = _model.associations[association].target;
const as = association;
const include = getNestedAssociations(model);
associations.push({
model: model,
as: as,
...(include amp;amp; { include: include }),
});
}
return associations;
}
Ответ №3:
Потеряв все надежды, я, наконец, просто попробовал один случайный snd, который сработал. Просто отправьте атрибуты с пустым массивом, тогда они не будут включены в результаты
{
model: User,
as: 'users',
attributes: [], // This will work//
where: {
user_id: 1
}
}