Получить дерево родителей + детей с pg-обещанием

Я используюpg-promise библиотека сbluebird для выполнения зависимых запросов. У меня есть две таблицы, a и b, выглядящие так:

|   a   |     |   b   |  
|-------|     |-------|
| a_id  |     | b_id  |
| prop1 |     | prop2 |
              |  b_a  |

гдеb.b_a это ссылка наa.a_id, Я хочу выбрать все записи, соответствующие данномуprop1 и результат должен содержать все соответствующиеaСтрелки плюс соответствующиеbСтрелки для каждогоa, Это должно быть выполнимо с двумя зависимыми запросами. Оба запроса могут возвращать несколько результатов.

Если столa возвращает только одну строку, я могу сделать это:

function getResult(prop1) {
    return db.task(function (t) {
        return t.one("select * from a where prop1=$1", prop1)
            .then(function (a) {
                return t.batch([a, t.any("select * from b where b_a=$1", a.a_id)]);
            })
            .then(function (data) {
                var a = data[0];
                var bs = data[1];
                bs.forEach(function (b) {
                    b.a = a;
                });
                return bs;
            });
    });
}

И я также могу получить все соответствующиеb-вход для несколькихa- результаты, подобные этому:

function getResult(prop1) {
    return db.task(function (t) {
        return t.many("select * from a where prop1=$1", prop1)
            .then(function (as) {
                var queries = [];
                as.forEach(function (a) {
                    queries.push(t.any("select * from b where b_a=$1", a.id));
                });
                return t.batch(queries); // could concat queries with as here, but there wouldn't be a reference which b row belongs to which a row
            })
            .then(function (data) {
                // data[n] contains all matching b rows
            });
    });
}

Но как собрать этих двоих вместе?

Ответы на вопрос(1)

Ваш ответ на вопрос