Segel.js/Wasserlinie füllen tief verschachtelten association
Ich verstehen, dass es keine integrierte Möglichkeit in die Segel.js/Wasserlinie Auffüllen von tief verschachtelten Verbände noch, also ich bin versucht, bluebird verspricht, zu erreichen, dass aber bei mir läuft in ein problem.
Ich bin erfolgreich abrufen der Benutzer und alle Beiträge (aufgefüllt mit den Bilder Sammlung, die mit ihm verbunden (Konsole.log zeigt mir, dass alles korrekt geschrieben). Allerdings, wenn ich Sie überschreiben die Eigenschaft "post" der Benutzer und versuchen, weisen die vollständig ausgefüllt Beiträge abgerufen, bevor es füllt nicht richtig die Bilder, die Eigentum von Post.js. Es ist wie das ORM ist die Verhinderung der Bild Sammlung von Post.js manuell zugewiesen werden.
Was mache ich falsch? Was ist der beste Weg, Auffüllen von tief verschachtelten eins-zu-viele-Assoziationen?
Balg habe ich eingefügt, der gesamte code, den ich ausführen....
//Populate nested association
nested: function (req, res, next){
var username = req.param("id");
User
.findOneByUsername(username)
.populateAll()
.then(function (user){
var posts = Post.find({
"user": user.id
})
.populate('images')
.populate('category')
.then(function (posts){
return posts;
});
return [user, posts];
})
.spread(function (user, posts){
user.posts = posts; //This won't work.... It assigns all the fields properly but the images collection attribute
res.json(user);
}).catch(function (err){
if (err) return res.serverError(err);
});
}
//--- User.js Model --- //
module.exports = {
attributes: {
.....,
posts: {
collection: "post",
via: "user"
},
.....
}
}
//--- Post.js Model --- //
module.exports = {
attributes: {
....,
user: {
model: "user"
},
images: {
collection: "postImage",
via: "post"
},
....
}
}
//--- PostImage.js Model --- //
module.exports = {
attributes: {
....,
post: {
model: "post"
}
},
}
Grüße,
Sávio Lucena
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist vielleicht eine alte Frage, aber es ist besser, Sie haben eine Antwort, so sails.js die Benutzer profitieren davon.
Dein Problem hier ist, dass, wenn die Segel gibt einen Datensatz (Innerhalb einer array), die Schlüssel von diesem Datensatz entsprechen, von Verbänden, sind in der Tat Getter/setter, und es scheint, dass der setter nicht können, was Sie wollen. Sie können
Object.getOwnPropertyDescriptor(user, 'posts')
zu bestätigen.Also, was Sie tun müssen, um der Lage sein, überschreiben Sie die Eigenschaft, wie Sie wollen, ist zu nennen
.toObject
drauf, (oder Klonen Sie die Eigenschaften über_.clone
oder manuell looping, aber Sie bekommen eine Menge von junk mit ihm, also halten Sie sich an die.toObject
), in jedem Fall erhalten Sie ein neues Objekt mit den Eigenschaften, die Sie benötigen, und es gibt keine Beschränkung, wie Sie es jetzt ändern.Sodass Ihr code wird wie folgt Aussehen:
Müssen Sie überschreiben jedes post-Objekt-id in der Benutzer.Beiträge array. Für weitere Informationen überprüfen Sie diese Antwort https://stackoverflow.com/a/26452990/4261327.