如何在Laravel控制器中将数据库数据赋值给数组并解决仅存最后一条的问题
问题根因
你的代码存在变量命名冲突问题:
- 你声明的用于存储所有分类数据的数组名为
$category - foreach循环的遍历临时变量同样命名为
$category
每次循环启动时,都会先把原本的数组变量覆盖为当前遍历的单条分类模型对象,因此最终数组里只会保留最后一次循环写入的数据。
修复后的代码
$categories = Category::where('parent_id', '=', null)->where('created_by', '=', \Auth::user()->creatorId())->get(); // 重命名存储数组,避免和循环临时变量重名 $categoryList = []; if(count($categories) > 0) { foreach ($categories as $category) { $categoryList[$category->id] = [ 'id' => $category->id, 'category_name' => $category->name, 'SubCategory' => $this->getSubcategoryByIdAction($category->id) ]; } }
后续直接使用$categoryList即可获取完整的分类数据数组。
编码提示
日常开发时可以通过命名规则避免这类问题:批量存储的容器变量可以增加List、Arr等标识后缀,和单次迭代的临时变量做明确区分,减少重名覆盖的概率。
内容的提问来源于stack exchange,提问作者kumari shwetha
相关产品推荐
相关产品推荐

