0

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

这是我的数据库表:

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

我正在获取与类别表相关的类别子类别。

这是我的控制器代码:

$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

但它不能正常工作。它一次又一次地提供相同的主要类别。任何人都可以建议一种正确的方法来检索数据吗?

4

1 回答 1

4

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

为您的表创建模型类:

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

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

于 2015-07-19T14:23:50.897 回答