Zum Beispiel zur Abfrage ich der Benutzer Informationen erhalten möchten, E-Mails und die Rollen von db und ein Objekt zu erstellen, wie:beste Weg, um eine viele zu viele Beziehung mit pg-Versprechen
{
"id": 1,
"firstname": "John",
"lastname": "Johnny",
"emails": [
{
"type": "work",
"email": "[email protected]"
},
{
"type": "personal",
"email": "[email protected]"
}
],
"roles": [
{
"role": "ADM",
"title": "Admin"
},
{
"role": "PUB",
"title": "Publisher"
}
]
}
Es gibt drei Tabellen I müssen abfragen:
Users
Tabelle hatid
,firstname
,lastname
.Emails
Tabelle hattype
,email
,user_id
.Roles
Tabelle hatrole
,title
,user_id
.
Basierend auf den pg-promise ‚s Wiki bin ich fast sicher, dass es getan werden muss Tasks verwenden, aber nicht sicher, wie man sich ketten würde.
UPDATE In meinem eigentlichen Projekt musste ich ein Produkt einfügen und die generierte ID verwenden, um Attribute einzufügen. Hinzufügen meinen Code hier, falls Sie eine ähnliche Situation:
//Insert a new product with attribites as key value pairs
post_product_with_attr: function(args) {
return db.task(function(t) {
return t.one(sql.post_new_product, args)
.then(function(dt) {
var queries = [];
Object.keys(args).forEach(function(key) {
queries.push(t.one(sql.post_attr_one, { Id: dt.id, key: key, value: args[key] }));
});
return queries.length ? t.batch(queries) : [dt];
});
});
}
Sie Kette Abfragen, wenn die Parameter einer Abfrage das Ergebnis der die vorherige Abfrage sind, die ist in Ihrem Beispiel nicht der Fall. Ihr Beispiel hat keine Abhängigkeit zwischen Abfrageergebnissen. Keine Verkettung ist erforderlich. –
@ vitaly-t, Ja, ich habe bei der Frage einen Fehler gemacht. Mein tatsächlicher Fall ist, dass ich die E-Mail habe und die user_id zuerst aus der E-Mail-Tabelle holen muss. – Parham
@ vitaly-t, Stimmt alles mit dem Update, das ich gerade hinzugefügt habe, Es fügt das Produkt hinzu und gibt die ID zurück, aber mit Debugger bekomme ich einen asynchronen Fehler 'Loose Anfrage außerhalb einer abgelaufenen Verbindung.' bei pg-promise /lib/query.js Zeile 183 'reject (errMsg);' – Parham