Как извлечь данные из базы данных в древовидную структуру с помощью laravel

Мое требование состоит в том, чтобы построить представление дерева, используя значения базы данных.

Вот мои таблицы базы данных:

|    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

Но это не работает нормально. Это дает одну и ту же основную категорию снова и снова ..
Кто-нибудь может предложить правильный способ получения данных?

0

Решение

Я предлагаю вам использовать 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 для родительских категорий и идентификатор родительского элемента для подкатегорий.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]