php 我要检索当前树的Downtree

cvxl0en2  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(91)

我有下面的树与目前的数据。我只想树103以下。

+----------------+----------------+
| child          | parent         |
+----------------+----------------+
| 216            |            103 |
| 217            |            216 |
| 88             |            216 |
| 102            |           NULL |
| 103            |            102 |
| 104            |            102 |
+----------------+----------------+

输出应为以下格式

102
          /   \ 
        103    104
        /
      216
     /  \
   217   218

从这个

103 
        /
      216
     /  \
   217   218

我需要这个在Mysql
我试着得到103个孩子,然后我得到216,我又试着得到216的孩子,在我的MYSQL中,以此类推,直到结束,我怎么得到,树结束?

yzxexxkh

yzxexxkh1#

下面是您可以根据需要更改的代码。
示例代码可以在Laravel中作为Helper函数使用,以获取所有子节点。

class UserUtility
{

    public static function children_ids($id)
    {
        $children = UserUtility::flat_children($id);

        return !empty($children) ? array_column($children, 'id') : array();
    }

    public static function flat_children($id)
    {
        $children = UserUtility::get_immediate_children($id, $with_trashed, true, $role_id);

        if (!empty($children)) {
            foreach ($children as $child) {

                $container[] = $child;
                $container = UserUtility::flat_children($child['id'], $with_trashed, $container, $role_id);

            }
        }

        return $container;
    }

    public static function get_immediate_children($id)
    {
        $children = User::withoutGlobalScopes()->where('parent_id', $id)->get();  // get the children data from DB
        $children = $as_array && !is_null($children) ? $children->toArray() : array();
        return $children;
    }
}

相关问题