Извлечение данных из 3 связанных таблиц

Я пытаюсь создать приложение, подобное REST-API, с ExpressJS и MySQL. У меня есть такая структура таблицы:

Course Table:
+----+--------+
| ID | TITLE  |
+----+--------+
|  1 | titel1 |
+----+--------+

Sections Table:
+----+----------+-----------+-----------+
| ID |  TITLE   |  CONTENT  | COURSE_ID |
+----+----------+-----------+-----------+
|  1 | Section1 | Content 1 |         1 |
|  2 | Section2 | Content 2 |         1 |
+----+----------+-----------+-----------+

Content Table:

+----+--------+----------+------------+
| ID | TITLE  | CONTENT  | SECTION_ID |
+----+--------+----------+------------+
|  1 | Title1 | Content1 |          1 |
|  1 | Title2 | Content2 |          2 |
+----+--------+----------+------------+
{
id: 1,
title: title1,
sections: [
    {
        id: 1,
        title: section1,
        text: Content 1,
        contents: [
            CONTENT OBJECT HERE
        ]
    },
    {
        id: 2,
        title: section2,
        text: Content 2,
        contents: [
            CONTENT OBJECT HERE
        ]
    }

]

}

Я уже получаю данные Курса и соответствующего раздела. Но есть проблема с асинхронностью и функцией карты, которую я точно не понимаю.

На самом деле я делаю это: Получите один курс по идентификатору, а затем используйте его обратный вызов, чтобы получить разделы, принадлежащие этому курсу. Я добавляю разделы к объекту курса и, наконец, возвращаюсь. Это прекрасно работает.

Но если я перебираю каждый раздел и пытаюсь запросить его содержимое, кажется, что моя функция map() не будет ждать, пока все не будет завершено.

Есть ли решение для этого случая? Я думаю, что это действительно очень распространенная задача для выполнения таких запросов. Я не понимаю, почему так сложно реализовать эту функциональность.

вы обычно используете язык API-интерфейса graphql для таких API-интерфейсов.

Indra 01.02.2019 16:01

Спасибо, GraphQL кажется очень мощной техникой. Но если бы я использовал это, мне нужно было бы реорганизовать всю структуру данных, стоящую за моим проектом. Это не стоит. Действительно ли не принято выполнять такую ​​задачу в Express/NodeJS?

J. Doe 01.02.2019 16:14

Node.js да, но с той же техникой, которую рекомендует graphql. GraphQL — это не язык, это шаблон. Однако вы можете попробовать написать свой собственный обходной путь. Например, выполнить соединение, а затем иметь класс, который форматирует результат этого соединения в ожидаемый результат.

Indra 01.02.2019 16:17
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
3
24
0

Другие вопросы по теме