Мое требование состоит в том, чтобы построить представление дерева, используя значения базы данных.
Вот мои таблицы базы данных:
| 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();
Вот структура HTML в * .blade.php:
@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, так как это упростит код и облегчит вашу жизнь в будущем.
Создайте классы моделей для ваших таблиц:
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 для родительских категорий и идентификатор родительского элемента для подкатегорий.
Других решений пока нет …