Хотя ошибка очевидна (упоминается в комментарии), вы можете переписать все это:
$categories = Category::withCount('products')->get(); // you load count to not make n+1 queries
$categoriesWithProducts = $categories->filter(function($category) {
return $category->products_count > 0
})->values();
return response()->json(categoriesWithProducts);
Конечно, вы можете сделать это еще проще:
return response()->json(Category::withCount('products')->get()
->filter(function($category) {
return $category->products_count > 0
})->values()
);
Но на самом делелучший способ - использовать Красноречивые отношения , чтобы вы могли использовать:
return response()->json(Category::has('products')->get());