使用 Sequelize 排除空关联数组

Exclude Empty association array using Sequelize

我有一个菜单 table 具有一对多的自关联,所以基本上结构是这样的

---Menu
    |
    '--submenu
    |
    '--submenu

---secondMenu
    |
    '--submenu
            |
            '--submenu
            |
            '--submenu
---thirdMenu

考虑没有任何子菜单的第三个菜单。在那种情况下,我希望子菜单字段为空,或者不应附加该字段。我得到的结果类似于

"menu": [
        {
            "name": "Settings",
            "id": 37,
            "slug": "Settings-ecom",
            "url": "/Settings",
            "submenu": [
                {
                    "name": "Settings-child1",
                    "id": 38,
                    "slug": "Settings-ecom-child1",
                    "url": "/Settings-child1",
                    "submenu": [
                        {
                            "name": "Settings-child1-child1",
                            "id": 40,
                            "slug": "Settings-ecom-child1-child1",
                            "url": "/Settings-child1-child1",
                            "submenu": []
                        }
                    ]
                }
            ]
        },
        {
            "name": "Dashboard",
            "id": 30,
            "slug": "dashboard-ecommerce",
            "url": "/dashboard",
            "submenu": []
        }
    ]

考虑结果中的 submenu=[] 部分,我需要的是当没有子菜单时它不应该 return submenu = [] 。它要么应该排除子菜单,要么应该像 submenu = null 下面是我获取菜单的查询

const menu = await Menu.findAll({
                    where: {parent_id: null},
                    attributes: Constants.attributes,
                    include: [
                        {
                            model: Menu,
                            as: 'submenu',
                            attributes: Constants.attributes,
                            include: [
                                {
                                    model: Menu,
                                    as: 'submenu',
                                    attributes: Constants.attributes,
                                   
                                },
                            ],
                        },
                    ],
                });

最后协会就像

menu.hasMany(models.menu, {
            as: 'submenu',
            foreignKey: 'parent_id',
            useJunctionTable: false,
         });

感谢您查看我的问题:)

好的,所以我找到了解决方案,即从最终结果中递归删除空子菜单对象。希望对某人有所帮助

cleanMenusObject = async (menuToUpdate) => {
            for (let menu of menuToUpdate) {
               if (menu.dataValues.submenu) {
                  if (!menu.dataValues.submenu.length) {
                     delete menu.dataValues.submenu;
                  } else {
                     await cleanMenusObject(menu.dataValues.submenu);
                  }
               }
            }
         };