如何使用 laravel 将数据从数据库检索到树视图

How to retrive data from database to a treeview using laravel

我的要求是使用数据库值构建树视图。

这是我的数据库 tables:

|    Categories   |  |sub_categories   |
|     id(pk)      |  |    id(pk)       |
|  cate_name      |  | sub_cat_name    |
| route_name      |  | route_name      |
                     |Categories_id(fk)|

我得到 类别子类别 以及与类别 table.

这是我的控制器代码:

$treeView = DB::table('categories')
                ->join('sub_categories', 'sub_categories.categories_id', '=', 'categories.id')
                ->get();

这里是*.blade.php中的HTML结构:

@foreach($treeView as $tv)
                <li class="treeview">
                    <a href="#"><i class="fa fa-link"></i> <span>{{ $tv->category_name }}</span> <i
                                class="fa fa-angle-left pull-right"></i></a>
                    <ul class="treeview-menu">
                        <li class=""><a href="#">{{$tv->sub_category_name}}</a></li>
                        <li><a href="#">Update Article</a></li>
                    </ul>
                </li>
            @endforeach

但效果不佳。它一次又一次地给出相同的主要类别.. 任何人都可以建议一个正确的方法来检索数据吗?

我建议你使用Eloquent,因为它会让代码更简单,让你以后的生活更轻松。

为您的 table 创建模型 类:

class Category extends Illuminate\Database\Eloquent\Model {
  protected $table = 'Categories';

  public function subcategories() {
    return $this->hasMany(Subcategory::class, 'Categories_id');
  }
}

class Subcategory extends Illuminate\Database\Eloquent\Model {
  protected $table = 'sub_categories';

  public function category() {
    return $this->belongsTo(Category::class, 'Categories_id');
  }
}

在你的控制器中获取这样的数据:

$treeView = Category::with(['subcategories'])->get();

然后在视图中:

@foreach($treeView as $category)
  <li class="treeview">
    <a href="#"><i class="fa fa-link"></i> <span>{{ $category->cate_name }}</span> <i class="fa fa-angle-left pull-right"></i></a>
    <ul class="treeview-menu">
      @foreach($category->subcategories as $subcategory)
        <li class=""><a href="#">{{$subcategory->sub_category_name}}</a></li>
      @endforeach
    </ul>
  </li>
@endforeach

我可以看到您的类别和子类别具有相同的结构。您可以考虑将它们存储在同一个 table 中,只需将 parent_id 字段添加到 table 并将其设置为 NULL 用于父类别和子类别的父 ID。