层次树遍历(Laravel/PHP)

层次树遍历(Laravel/PHP),php,laravel,hierarchy,laravel-7,Php,Laravel,Hierarchy,Laravel 7,我必须获取特定父节点的所有左侧和右侧节点。这是我的数据库表结构 Schema::create('user', function (Blueprint $table) { $table->id(); $table->string('code')->unique(); $table->string('parent_code'); $table->enum('position', ['left', 'right', 'root']); })

我必须获取特定父节点的所有左侧和右侧节点。这是我的数据库表结构

Schema::create('user', function (Blueprint $table) {
    $table->id();
    $table->string('code')->unique();
    $table->string('parent_code');
    $table->enum('position', ['left', 'right', 'root']);
});
我试图从父节点循环到它的节点,但似乎循环越深,所需时间就越长。
有更好的方法遍历树吗?

我建议使用已经创建并测试过的包来处理类似的事情


我还可以为嵌套树推荐这个包:

将有助于在您的问题中添加显示如何获取这些结果的代码。另外,请精确地说明所需结果的深度。@N69S我已经用当前代码编辑了我的问题。谢谢您推荐该软件包。我已经考虑过这个软件包,但我在想,如果我能找到另一种不用软件包的方法,那么使用软件包(几乎)总比自己创造一些东西并重新发明一个轮子要好。软件包已经过测试。软件包已被记录在案。软件包是很久以前创建的,许多用户已经添加了反馈(软件包得到了改进)。包已经完成了,所以您可以花时间在您的业务模型上,而不是创建一些仅仅是帮助者或支持部分的东西。当然,当您需要更具体的逻辑,并且找不到用于该逻辑的包,或者包的质量较低时,您自己的代码更好(通常)。
$users= User::where('parent_code', $account->code)->where('position', 'left')->get();
$collect = new Collection();
do {
    foreach ($users as $item) {
        $level = User::where('parent_code', $item->code)->get();
        foreach ($level as $lvlitem) {
            $collect->push($lvlitem);
        }
    }
    $users = $collect;
} while (!$users->isEmpty());