我的要求是使用数据库值构建树视图。
以下是我的数据库表:
| 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
但它不能正常工作。它一次又一次地给出相同的主要类别.. 任何人都可以建议一种正确的方法来检索数据吗?
答案 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。