【问题标题】:Hierarchy Tree Traversal (Laravel/PHP)层次树遍历 (Laravel/PHP)
【发布时间】:2020-08-24 09:18:07
【问题描述】:

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

Schema::create('user', function (Blueprint $table) {
    $table->id();
    $table->string('code')->unique();
    $table->string('parent_code');
    $table->enum('position', ['left', 'right', 'root']);
});
$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());

我试图从我的父节点循环到它的节点,但它似乎越深,需要的时间就越长。 有没有更好的遍历树的方法?

【问题讨论】:

  • 将有助于在您的问题中添加显示您如何获取这些结果的代码。还要准确了解所需结果的深度。
  • @N69S 我已经用我当前的代码编辑了我的问题。

标签: php laravel hierarchy laravel-7


【解决方案1】:

我建议使用已经创建和测试过的包来做类似的事情。

我也可以为嵌套树推荐这个包:https://github.com/lazychaser/laravel-nestedset

【讨论】:

  • 感谢您推荐该软件包。我已经考虑过那个包,但我正在考虑是否可以在不使用包的情况下找到另一种方法。
  • 使用包(几乎)总是比自己创造一些东西并重新发明轮子更好。包已经过测试。包已经记录在案。包是很久以前创建的,许多用户已经添加了反馈(包已改进)。包已经完成,因此您可以将时间花在您的业务模型上,而不是创建仅是帮助或支持部分的东西。当然,当您需要更具体的逻辑并且您找不到适合该逻辑的包或包质量低下时- 自己的代码[通常]更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多