【问题标题】:Adding items into array Laravel using for loop使用 for 循环将项目添加到数组 Laravel
【发布时间】:2019-02-23 14:40:45
【问题描述】:

我正在尝试从数据库中获取所有具有productscategories 并将它们推送到另一个数组中。

我有四个 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);
}

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

我哪里错了?

【问题讨论】:

  • 使用 $i
  • 试试if(count($categories[$i]-&gt;products) &gt; 0) {
  • 移动您的return,使其位于循环之后(外部)。目前,它总是会在第一次迭代后返回数据。
  • @MagnusEriksson 我实际上错过了这一点。谢谢它解决了。
  • 投票结束是一个错字。

标签: php laravel laravel-5 eloquent laravel-5.7


【解决方案1】:

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

$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 relationships,这样你就可以使用:

return response()->json(Category::has('products')->get());

【讨论】:

  • 非常感谢,很有启发性。
  • 我推荐一个集合而不是使用数组。 $categoriesWithProducts = 收集();然后在你循环中做 $categoriesWithProducts->push($categories[$i]);然后返回 $categoriesWithProducts;
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多