построение дерева структуры данных форма mysql таблица рекурсия проблема - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь построить рекурсивную форму структуры из данных, хранящихся в таблице mysql, на которую ссылаются сами, это означает, что некоторые строки могут стать родителями для других, и это демонстрационные данные, которые у меня есть enter image description here

полученное дерево должно быть деревом, которое показывает отношения между ребенком и родителями с моим кодом, который мне удалось создать enter image description here проблема в том, что bio4 не хватает своего потомка bio5, я думаюпроблема в том, что когда у нас есть два родительских супруга на одном и том же уровне, первый работает правильно, но когда рекурсия заканчивается и возвращается к другим уровням, родительский подуровень становится нулевым, это мой код, пока что в моем основном маршруте в экспрессея также использовал модули knex.js и accesscontrol.js

router.get('/',async  function (req, res, next) {
 const permission = ac.can(req.user.role).readAny("test");
 if (!permission.granted)
    res.status(401).send("Insufficient Permission");

 testgroups = await db(`servicegroups`).select("*","ServiceGroupId AS id","Name AS text ",db.raw(`(SELECT "root" ) AS type`) ).where("ServiceGroupType", '=', 2).andWhere("ParentId", '=', 0).andWhere("Deleted",'=',0).select();
 var result = [];
 for(i in testgroups){
    result.push(testgroups[i])
    await global.getTestChildrens(testgroups[i], db);         
 }
 res.render("admin/lis/tests/tests",{user:req.user , data:{testgroups:JSON.stringify(result) } })

});

также основная функция похожа на это Примечание: глобальная переменная - это просто глобальная переменная, которую я использую в своей системе, в которой есть пара важных функцийиз них - рекурсивная функция, а db - просто экземпляр knex моей базы данныхион

global.getTestChildrens =async  function (entity,db) {

 childs = await db('servicegroups').select("*", "ServiceGroupId AS id", "Name AS text ", db.raw(`(SELECT "subroot" ) AS type`)).where("ParentId", '=', entity.ServiceGroupId).andWhere("Deleted", '=', 0);
 if(childs.length>0){
    entity.children = childs;
 }else{
    entity.type = "leaf";
 }
 for(i in childs){        
    if (childs[i]){
        await global.getTestChildrens(childs[i], db);
    }else{
        console.log("undifened found :"+i)
    }
 }
 return entity;    
}

1 Ответ

0 голосов
/ 10 июня 2018

решение кажется очень глупым, но решение состояло в том, что я поставил ключевое слово

const

перед переменной childs внутри функции

getTestChildrens 

, и проблема была решена, я изменил отношения дереваи это работает со всеми тестовыми примерами enter image description here

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