2

たとえば、ユーザー情報、電子メール、およびそのロールを 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テーブルにはidfirstname、がありlastnameます。
  • Emailsテーブルにはtypeemail、がありuser_idます。
  • Rolesテーブルにはroletitle、があり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];
            });
    });
}
4

1 に答える 1