如何使用 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。
我的要求是使用数据库值构建树视图。
这是我的数据库 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。