Например, я хочу, чтобы получить данные пользователя, сообщения электронной почты, и это роли из БД и создать объект, как:Лучший способ запросить многие ко многим, используя PG-обещание
{
"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"
}
]
}
Есть три таблицы I необходимо запросить:
Users
таблица имеетid
,firstname
,lastname
.Emails
стол имеетtype
,email
,user_id
.Roles
стол имеетrole
,title
,user_id
.
на основе вики pg-promise «s Я почти уверен, что это должно быть сделано с помощью Tasks, но не уверен, как вы бы приковать их.
UPDATE В моем фактическом проекте мне пришлось вставить продукт и использовать сгенерированный идентификатор для вставки атрибутов. Добавление моего кода здесь в случае, если у вас есть подобная ситуация:
//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];
});
});
}
Вы цепочка запросы, когда параметры одного запроса являются результатом из предыдущего запроса, который в вашем примере это не так. В вашем примере нет зависимости между результатами запроса. Не требуется цепочки. –
@ vitaly-t, Да, я ошибся в вопросе. Мое фактическое дело в том, что у меня есть электронное письмо, и сначала нужно получить user_id из таблицы электронной почты. – Parham
@ vitaly-t, Что-то не в порядке с обновлением, которое я только что добавил, Он добавляет продукт и возвращает идентификатор, но использует отладчик. Я получаю асинхронную ошибку «Свободный запрос за пределами истекшего соединения». Pg-prom /lib/query.js строка 183 'reject (errMsg);' – Parham