Я пытаюсь получить все categories
который имеет products
из базы данных и вставьте их в другой массив.
У меня четыре 3 categories
и двое из них имеют products
,
Вот мой код:
$categories = Category::all();
$count = count($categories);
$categoriesWithProducts = array();
for($i = 0; $i < $count; $i++) {
if($categories[$i]->products->count() > 0) {
array_push($categoriesWithProducts, $categories[$i]);
}
return response()->json($categoriesWithProducts);
}
Я получаю массив только с одним элементом вместо двух.
Куда я иду не так?
Хотя ошибка очевидна (упоминается в комментарии), вы можете переписать все это:
$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());
Других решений пока нет …