Я хочу видеть все содержимое во всех темах во всех дисциплинах с помощью этого кода:
UserDisciplineModel.findAll({
logging: console.log,
duplicating: false,
include: [{
model: Discipline,
required: true,
attributes: ['id','name','description'],
include: [{
model: Topic,
required: true,
attributes: ['id','name','description'],
include: [{
model: Content,
required: true,
attributes: ['id','name','description'],
}]
}]
}],
where: {id_user: id_user}
});
Но я получаю только 1 контент в 1 топи c по каждой из всех дисциплин, например в этом ответе:
[
{
"id": 2,
"id_user": 1,
"id_discipline": 2,
"status": null,
"agreement": {},
"createdAt": "2020-08-03T04:11:50.849Z",
"updatedAt": "2020-08-03T04:11:50.849Z",
"disciplines": [
{
"id": 2,
"name": "Discipline Example 2",
"description": "Description Discipline Example 2",
"topic": {
"id": 4,
"name": "Topic 2 Disc 2",
"description": "description",
"content": {
"id": 6,
"name": "content1topic2",
"description": "desccontent1topic2"
}
}
}
]
},
{
"id": 1,
"id_user": 1,
"id_discipline": 1,
"status": null,
"agreement": {},
"createdAt": "2020-08-04T04:11:50.849Z",
"updatedAt": "2020-08-04T04:11:50.849Z",
"disciplines": [
{
"id": 1,
"name": "Discipline Example 1",
"description": "Description Discipline Example 1",
"topic": {
"id": 3,
"name": "Example Topic 3 Discipline 1",
"description": "Any description",
"content": {
"id": 3,
"name": "Example Content 2 Topic 1 Discipline 1",
"description": "Description right here"
}
}
}
]
}
]
Итак ... Когда я запускаю, Sequelize сгенерирует это sql:
FROM "user_disciplines" AS "user_discipline" INNER JOIN "disciplines" AS "disciplines" ON "user_discipline"."id_discipline" = "disciplines"."id" INNER JOIN "topics" AS "disciplines->topic" ON "disciplines"."id" = "disciplines->topic"."id_discipline" INNER JOIN "contents" AS "disciplines->topic->content" ON "disciplines->topic"."id" = "disciplines->topic->content"."id_topic" WHERE "user_discipline"."id_user" = 1;
Кажется, все в порядке, но, разговаривая с другом, я замечаю что, возможно, мне нужно будет использовать что-то вроде подзапроса (не уверен).
Итак, мне нужен список внутри списка внутри списка. Мой идеальный ответ был бы таким:
"disciplines": [
{
"id": 1,
"name": "Discipline Example 1",
"description": "Description Discipline Example 1",
"topics": [
{
"id": 1,
"name": "Example Topic 1 Discipline 1",
"description": "Any description",
"id_discipline": 1,
"contents": [
{
"id": 1,
"name": "Example Content 1 Topic 1 Discipline 1",
"description": "Description example",
"id_topic": 1,
},
{
"id": 7,
"name": "Example Content 2 Topic 1 Discipline 1",
"description": "Description Any!",
"id_topic": 1,
}
]
},
{
"id": 2,
"name": "Example Topic 2 Discipline 1",
"description": "Any Description to this topic",
"id_discipline": 1,
"contents": []
},
{
"id": 3,
"name": "Example Topic 3 Discipline 1",
"description": "Any description",
"id_discipline": 1,
"contents": [
{
"id": 2,
"name": "Example Content 1 Topic 3 Discipline 1",
"description": "Example Description",
"id_topic": 3,
},
{
"id": 3,
"name": "Example Content 2 Topic 1 Discipline 1",
"description": "Description right here",
"id_topic": 3,
}
]
}
]
},
{
"id": 2,
"name": "Discipline Example 2",
"description": "Description Discipline Example 2",
"topics": [
{
"id": 5,
"name": "Topic 1 Disc 2",
"description": "Description Topic Example",
"id_discipline": 2,
"contents": [
{
"id": 4,
"name": "Content1",
"description": "desccont1",
"id_topic": 5,
},
{
"id": 5,
"name": "Content2",
"description": "desccont2",
"id_topic": 5,
}
]
},
{
"id": 4,
"name": "Topic 2 Disc 2",
"description": "description",
"id_discipline": 2,
"contents": [
{
"id": 6,
"name": "content1topic2",
"description": "desccontent1topic2",
"id_topic": 4,
"id_author": 1,
"icon": "pe-7s-hourglass icon-gradient bg-grow-early",
"createdAt": "2020-08-05T18:14:28.710Z",
"updatedAt": "2020-08-05T18:14:28.710Z"
}
]
}
]
}
]
Объясните проект:
Я использую Sequelize, Node.js и PostgreSQL базу данных.
В этом В данном случае у меня есть 5 таблиц:
Пользователь, Дисциплина, Топи c, Контент, Пользователь_Дисциплина
Многие материалы содержат по одной теме. У многих тем одна дисциплина. Дисциплина таблиц -> Topi c (topi c .id_discipline) -> Content (content.id_topi c), все связаны внешними ключами. (ОДИН ДО МНОГИХ)
Таблица User_Discipline связывает пользователя и дисциплины, у многих пользователей может быть много дисциплин. (user_discipline.user_id, user_discipline.discipline_id) (МНОГО ДО МНОГО)