たとえば、ユーザー情報、電子メール、およびそのロールを db から取得し、次のようなオブジェクトを作成したいとします。
{
"id": 1,
"firstname": "John",
"lastname": "Johnny",
"emails": [
{
"type": "work",
"email": "work@work.com"
},
{
"type": "personal",
"email": "personal@personal.com"
}
],
"roles": [
{
"role": "ADM",
"title": "Admin"
},
{
"role": "PUB",
"title": "Publisher"
}
]
}
照会する必要がある 3 つのテーブルがあります。
Users
テーブルにはid
、firstname
、がありlastname
ます。Emails
テーブルにはtype
、email
、がありuser_id
ます。Roles
テーブルにはrole
、title
、がありuser_id
ます。
pg-promiseの wiki に基づいて、タスクを使用して実行する必要があるとほぼ確信していますが、それらをどのようにチェーンするかはわかりません。
UPDATE私の実際のプロジェクトでは、製品を挿入し、生成されたIDを使用して属性を挿入する必要がありました。同様の状況が発生した場合に備えて、ここに私のコードを追加します。
//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];
});
});
}