Уточните, как выбрать дочерний элемент childs в одной таблице? - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть следующая таблица в базе данных postgresql

id | name       |active| parentId
--------------------------------
1  | food       | true | null
2  | soft drink | true | 1
3  | canned food| true | 1
4  | sweet      | true | 1
5  | candy      | true | 4
6  | chocolate  | true | 4
7  | chemical   | true | null

Как вы можете видеть, они связаны с отношениями родитель-ребенок своими идентификаторами

, например: food -> sweet -> candy, chocolate

Я хочу написать запрос с sequelize, который вернет родителя и всех связанных с ним детей.

Допустим, я выбрал food, запрос должен вернуть все строки, где parentId равен id 1, а затем вернуть все строки, где parentId равен 2,3,4 («дети еды»), а затем вернуть все строки, где parentId равно 5,6 (дети сладкого) и т. д., если есть дети.

Возможно ли это в одном объекте where?

db.ItemGroup.findAll({
  where: {
    // query
  }
});

1 Ответ

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

вы можете использовать: sequelize -ierarchy.js

Здесь вы должны определить модель следующим образом:

var folder = sequelize.define('folder', {
    name: Sequelize.STRING,
    parentId: {
        type: Sequelize.INTEGER,
        hierarchy: true // <------- HERE
    }
});

И я думаю, это то, что вы ищете:

folder
.findAll({ hierarchy: true }) // <------- HERE
.then(function(results) {
    // results = [
    //  { id: 1, parentId: null, name: 'a', children: [
    //      { id: 2, parentId: 1, name: 'ab', children: [
    //          { id: 3, parentId: 2, name: 'abc' }
    //      ] }
    //  ] }
    // ]
});

Вы можете проверить ссылку, есть другие примеры, чтобы показать возможные вещи, которые вы можете сделать с этой библиотекой.

ПРИМЕЧАНИЕ: Вы также можете сделать это без плагина, но синица будет очень Длина пути, это чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...