Соедините три таблицы, используя библиотеку knex.js - PullRequest
0 голосов
/ 19 ноября 2018

Я использую knex.js

Предположим, у нас есть три таблицы: - table1-- идентификатор, имя, адрес table2 - id, город, штат, table1_id в качестве fk table3 - id, housenumber, table1_idкак fk

Я хочу присоединиться к этим трем таблицам, используя библиотеку knex.js для узла, и выразить так, чтобы я хотел получить вывод json следующим образом.

{"id": 1, "name":" abc "," address: "xyz", "table2": {"id": 1, "city": "ttt", "state": "www"} // я хочу проверить, если table1.id == table2.table1_id, затем поместите детали таблицы "table3": [] // если не найдено никакого отношения между table1.id === table3.table1.id, то сохраните его как массив}

1 Ответ

0 голосов
/ 20 ноября 2018

tl; dr knex - инструмент слишком низкого уровня для того, что вы пытаетесь сделать, вы должны использовать ORM для такого рода задач

Однако вы можете сделать это с большим количеством ручной работы.

Сначала необходимо выполнить запрос с правильными объединениями и создать псевдонимы с префиксами таблиц для каждого столбца таблицы, чтобы иметь возможность получать данные результатов в формате, в котором все данные представлены в виде плоского массива, например:

knex('table1' as t1)
  .join('table2 as t2', 't2.t1_id', 't1.id')
  .select(
    't1.id as t1_id', 
    't1.other_column as t1_other_column', 
    't2.id as t2_id', <more columns you want to extract>)

Результаты примерно такие же, как

[ { t1_id: 1, t1_other_column: 'foo', t2_id: 4}, ... more rows with flat data... }]

Затем вам нужно написать код JavaScript для реструктуризации плоских данных во вложенные объекты.

Но вам не следует выполнять такую ​​работу вручную.Все ORM на основе knex уже внедрили общие решения для простого написания запросов такого типа.

...