Sequelize findall für jeden findall möglich ist?
Habe ich diese Tabellen. Kunden haben Projekte und Benutzer arbeiten in Projekten
Clients
- id
- name
Projects
- id
- name
- client_id
Users
- id
- name
UserProject
- user_id
- project_id
Ich versuche, um alle Benutzer, die jedes Projekt des Kunden für Beispiel id=1
Schließlich, so etwas wie dieses JSON:
[{
id:1
name:"Project1"
users:[{
id:23
name:"Robert Stark"
},{
id:67
name: "John Snow"
}]
}, {
id:2
name:"Project2"
users:[{
id:1
name:"Aria Stark"
}]
}]
Wenn ich Projekte finden, es funktioniert gut
req.tables.Project.findAll({
where: {
client_id:1
}
}).success(function(projects) {
...
Wenn ich die Benutzer von ein Projekt funktioniert es einwandfrei
req.tables.UserProject.findAll({
where: {
project_id:1
},
include: [
{ model: req.tables.User, as: 'User' }
]
}).success(function(UsersProject) {
...
Aber, wie kann ich beides miteinander verbinden, finAlls, um alle Benutzer in jedem Projekt? So etwas wie der nächste code, aber das funktioniert gut. Wie kann ich es tun?
Ich fand diese: Node.js mehrere Sequelize raw-sql-Abfragen sub-queries aber Es funktioniert nicht für mich oder ich nicht weiß, wie es zu benutzen, weil ich 2 loops nicht nur eine. Ich habe Projekte Schleife und Benutzer-Schleife
req.tables.Project.findAll({
where: {
client_id:1
}
}).success(function(projects) {
var ret_projects=[];
projects.forEach(function (project) {
var ret_project={
id:project.id,
name:project.name,
data:project.created,
users:[]
});
req.tables.UserProject.findAll({
where: {
project_id:project.id
},
include: [
{ model: req.tables.User, as: 'User' }
]
}).success(function(UsersProject) {
var ret_users=[];
UsersProject.forEach(function (UserProject) {
ret_users.push({
id:UserProject.user.id,
name:UserProject.user.name,
email:UserProject.user.email
});
});
ret_project.users=ret_users;
ret_project.push(ret_project)
});
});
res.json(projects);
});
InformationsquelleAutor David | 2014-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie Sie bereits eine Lösung haben, aber ich stieß auf das gleiche Problem und kam mit dieser Lösung.
Sehr ähnlich zu dem, was cvng gesagt, nur über verschachtelte gehören. So verwenden:
Dann:
Die Fähigkeit, Sie zu Laden, die weitere geschachtelte Verwandte Modelle' ist beschrieben durch die Parameter " - option.enthalten[].include' hier: Sequelize API-Referenz-Modell.
Vielleicht ist dies für jemanden nützlich sein in der Zukunft.
Prost!
InformationsquelleAutor aidanj
Ich denke, man müsste nicht auf die Abfrage UserProject Entität direkt und unmittelbar, sondern Sequelize Eager loading-Methode zum abrufen Ihrer Entitäten.
Ihre Modelle und Verbände sollten in etwa so Aussehen :
und einmal haben Sie alle Projekte im Zusammenhang mit client -, finder-Methode :
Werfen Sie einen Blick auf, http://sequelizejs.com/docs/1.7.8/models#eager-loading.
Hoffe, es hilft !
through: 'UserProject
sowohlProject.hasMany(User)
undUser.hasMany(Project)
Ich machte eine kurze Zusammenfassung, die Sie wollen nehmen a look! viele-zu-viele -
InformationsquelleAutor cvng
Endlich!!
cvng, dein Beispiel helpme, eine Menge, danke.
Aber ich habe 3 Ebenen Client, Projekt, thi ist meine Letzte Lösung, ist das eine gute Lösung?
InformationsquelleAutor David