Ассоциация преувеличивает 3 таблицы, многие для многих
У меня есть 4 таблицы
- client
- project
- user
- userProject
Один проект принадлежит клиенту, и ему нужно иметь клиентский ключ client_id.
У UserProject есть внешние_страницы project_id и user_id, принадлежащие проекту и пользователю.
Один пользователь владеет клиентами своих проектов.
- Как я могу перечислить клиентов одного пользователя?
Ответы
Ответ 1
Мне интересно, что вы можете использовать загружаемую функцию из sequalize:
Client.findAll({
include: [{
model: Project,
include: [{
model: User,
where: {
id: <UserId>
},
required: false
}]
}]
}).then(function(clients) {
/* ... */
});
Ответ 2
Это создает отношение "много-ко-многим" между user
и project
. Между user
и client
вы должны иметь отношение "много-ко-многим-к-одному". Это не поддерживается sequelize. Я бы создал метод экземпляра в модели user
следующим образом:
User = sequelize.define('user', {
// ... definition of user ...
},{
instanceMethods: {
getClients: function() {
return this.getProjects().then(function (projects) {
var id_map = {};
for (var i = 0; i < projects.length; i++) {
id_map[projects[i].clientId] = 1;
}
return Client.findAll({
where: { id: [Object.keys(id_map)] }
});
});
}
}
});
а затем вызовите эту функцию, когда у вас есть такой пользовательский экземпляр, чтобы получить клиентов:
user.getClients().then(function (clients) {
console.log(clients);
});