如何将Laravel的Baum层次树合并为一棵树?

时间:2017-02-27 18:07:32

标签: php recursion laravel-5 tree

我使用Laravel 5.1和etrepat/baum包在我的Category模型上实现嵌套集。

我有一系列类别,每一个我都得到他们的祖先hierarchy tree这样:

$category->getAncestorsAndSelf()->toHierarchy();

例如,我们说我有4个类别:Category CCategory DCategory ECategory F。每棵树都是这样的:

  • A类
    • B类
      • C类
  • A类
    • B类
      • D类
  • A类
    • B类
      • C类
        • 类别E
  • A类
    • 类别F

我试图将它们合并到一棵树中:

  • A类
    • B类
      • C类
        • 类别E
      • D类
    • 类别F

到目前为止,我已经尝试了merge()函数和一个没有运气的自定义递归函数,我总是最终得到重复项。

1 个答案:

答案 0 :(得分:1)

您可以:

  • 获取层次结构中涉及的所有类别
  • 摆脱重复
  • 使用Baum\Extensions\Eloquent\Collection创建层次结构
use Baum\Extensions\Eloquent\Collection as BaumCollection;

// ... 

$categoriesAndAncestors = $category
    ->flatMap(function ($cat) {
        return $cat->getAncestorsAndSelf();
    })
    ->uniqueStrict(function ($cat) {
        return $cat->id;
    });

$result = BaumCollection::make($categoriesAndAncestors)->toHierarchy();