You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:54:05