выбрать все много-много записей вместе с родительской таблицей в одном обращении к базе данных - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть три таблицы (Postgresql):

ModelA:
    model_a_id
    item1
    item2


ModelB:
    model_b_id
    item1
    item2


ModelA_ModelB:
    model_a_id foreign_key to ModelA
    model_b_id foreign_key to ModelB

ОК

Я хочу выбрать Все ModelA со всем отношением к ModelB.

что я хочу:

[{
    Record1ModelA: {
        item1: 'A',
        item2: 'B',
        modelBList: [{
              Record1ModelB: {
                  item1: 'C',
                  item2: 'D'
              },
              Record2ModelB: {
                  item1: 'E',
                  item2: 'F'
              }
              ...
        }]
    },
    Record2ModelA: {
        item1: 'G',
        item2: 'H',
        modelBList: [{
              Record1ModelB: {
                  item1: 'I',
                  item2: 'G'
              },
              Record2ModelB: {
                  item1: 'K',
                  item2: 'L'
              }
              ...
        }]
    }
    ...
}]

Вопрос :

  1. Можно ли получить такой результат при попадании в базу данных?
  2. Если да, как можноЛи я достичь этого результата с помощью SQL Query?

1 Ответ

0 голосов
/ 21 сентября 2018

Хорошо, наконец, я нашел ответ на этот вопрос:

Ответ: json_agg в postgresql

SELECT ModelA.model_a_id, ModelA.item1, ModelA.item2, json_agg(mb.*)
FROM ModelA
LEFT JOIN ModelA_ModelB as mab on ModelA.model_a_id = mab.model_a_id
LEFT JOIN  ModelB as mb on mb.model_b_id = mab.model_b_id
GROUP BY ModelA.model_a_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...