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

时间:2015-07-19 08:54:51

标签: php laravel laravel-5 eloquent laravel-5.1

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

以下是我的数据库表:

|    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

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

1 个答案:

答案 0 :(得分:3)

我建议您使用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 字段,并为父类别和子类别的父ID设置为NULL。