У меня проблема с попыткой создать запрос, который бы возвращал все, что мне нужно, в одном запросе. Это наша схема БД: https://dbdiagram.io/d/5e4fe6e007a7395d994df445 БД - это heroku postgres, которая по умолчанию версии 12
Учитывая это, мне нужно иметь возможность вернуть объект колоды со всеми пользователь указал c подробности, добавленные к карточкам. Форма возвращаемого объекта должна выглядеть примерно так:
{
deck_id,
deck_name,
deck_author,
flashcards:[
{
flashcard_id,
question,
asnwer,
mastery(needs to be joined from card_mastery table)
}
],
tags:[
array of tags
]
}
. Прямо сейчас у меня есть следующий запрос, встроенный в knex. js:
db('deck_tags as dt')
.rightJoin('decks as d', 'd.id', 'dt.deck_id')
.leftJoin('flashcards as f', 'f.deck_id', 'd.id')
.leftJoin('tags as t', 't.id', 'dt.tag_id')
.select(
'd.id as deck_id',
'd.user_id',
'd.name as deck_name',
'd.public',
'd.created_at',
'd.updated_at',
db.raw(
'array_to_json(array_remove(ARRAY_AGG( DISTINCT t), NULL)) as tags'
),
db.raw(
'array_to_json(array_remove(ARRAY_AGG( DISTINCT f), NULL)) as flashcards'
)
)
.groupBy(
'd.id',
'd.user_id',
'd.name',
'd.public',
'd.created_at',
'd.updated_at'
)
.where({ 'd.id': id })
.first();
Кажется, проблема в том, что пользователь получает указанную пользователем информацию. c данные в массив карточек.