0

我正在尝试从数据库中获取所有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);
}

我得到一个只有一项而不是两项的数组。

我哪里错了?

4

1 回答 1

2

虽然错误很明显(在评论中提到)你可以重写整个事情:

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

但实际上最好的方法是使用Eloquent 关系,这样你就可以使用:

return response()->json(Category::has('products')->get());
于 2018-09-19T22:00:35.203 回答