【问题标题】:Get all child, grandchild in recursive tree获取递归树中的所有孩子,孙子
【发布时间】:2022-01-27 01:43:38
【问题描述】:

我有这个问题,我现在只能得到父母的直接孩子,我需要从父母数据中获取所有的孩子和孙子,结果应该是这样的

这是我现在使用的当前代码

public function tree_view(Request $request){
    
    $data = DB::table('users')
            ->select('id', 'username', 'referral', 'name')
            ->get();

    foreach($data as $key => $value){
         
        $item = \DB::table('users')
        ->where('referral', $value->username); 
        
        $downline = $item->count(); 
        
        
        $data[$key]->downline = $downline;  # Total Downline  
    }
    
    return view('admin.tree_view', ['data'=> $data]);
}

这是数据库结构(所有数据都来自同一个表(用户))

【问题讨论】:

  • 如果你使用关系那么你可以不用包我觉得你需要改变你的表结构,我建议使用集合论
  • @bhucho 你能解释更多关于集合论的信息吗?你的意思是什么变化?
  • 使用集合论在 php 中搜索树结构有一些 pdf 您可以阅读它们然后相应地更改 db 结构将有助于遍历数据您甚至可以在模型中创建一些访问器和修改器以轻松访问它们跨度>

标签: php laravel


【解决方案1】:

我推荐使用this package

阅读此包的document。你可以得到所有的父母,孩子,祖先,后代。您只需将三列添加到表中。然后在php artisan tinker 中执行这段代码:

User::fixTree();

那么你就可以使用这个包的功能了。

【讨论】:

  • 不使用新包还有其他方法吗?
  • 这个问题需要一个算法。实际上,这个包使用了 DFS 算法。您可以自己实现它或使用其他算法。对于一些有同样问题的项目,我用过这个包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 2015-05-31
  • 1970-01-01
相关资源
最近更新 更多