Добавление элементов в массив Laravel с помощью цикла for - PullRequest
0 голосов
/ 19 сентября 2018

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

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

Где я ошибаюсь?

1 Ответ

0 голосов
/ 20 сентября 2018

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

$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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...