Добавление элементов в массив Laravel с помощью цикла for

Я пытаюсь получить все 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);
}

Я получаю массив только с одним элементом вместо двух.

Куда я иду не так?

0

Решение

Хотя ошибка очевидна (упоминается в комментарии), вы можете переписать все это:

$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());
2

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

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

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