$categories_sidebar = Category::whereHas('products', function ($q) use ($request, $filter) {
$q->filter($filter)->filterParams($request->get('filterParams', []));
})->select(['id', 'parent_id']);
$categories_sidebar = Category::whereIn('id', array_merge($categories_sidebar->pluck('id')->toArray(), $categories_sidebar->pluck('parent_id')->toArray()))
->get()->toTree()->jsonSerialize();
Что он делает.
Получает категории в которых есть товары, далее достаёт оттуда id и parent_id (родитель катгории)
снова ищет эти категории и отдаёт в метод toTree nestedset