В общем есть таблица категорий

.
Код модели
class ProductCategory extends Model
{
protected $table = 'product_categories';
public function ProductCategory(){
return $this->hasMany($this, 'parent_id');
}
public function rootCategories(){
return $this->where('parent_id', 0)->with('ProductCategory')->get();
}
}
Код контроллера
class ProductCategoryController extends Controller
{
public function index(ProductCategory $productCategory){
$rootCategories = $productCategory->rootCategories();
return view('layouts.catalog', ['rootCategories' => $rootCategories,]);
}
}
Код шаблона 'layouts.catalog'
<h1>Catalog</h1>
<ul>
@foreach($rootCategories as $rootCategory)
<li>{{ $rootCategory->name }}</li>
@if($rootCategory->ProductCategory->count() > 0)
@include('layouts.partials.treeChildMenu', ['categories' => $rootCategory->ProductCategory])
@endif
@endforeach
</ul>
И код шаблона 'layouts.partials.treeChildMenu'
<ul>
@foreach($categories as $category)
<li>{{ $category->name }}</li>
@if($category->ProductCategory->count() > 0)
@include('layouts.partials.treeChildMenu', ['categories' => $category->ProductCategory])
@endif
@endforeach
</ul>
Всё как-бы хорошо

Но пугает количество запросов в базу данных. Может это можно как-то оптимизировать? Потому что при добавлении новых пунктов меню запросов становится всё больше и на много.