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

如何更新Laravel嵌套Collection中的深层嵌套属性值

问题根源

你遇到的问题来自两个常见的Laravel集合使用误区:

  • map 方法为非破坏性方法,仅返回处理后的新集合,不会修改原集合本身。你的代码既没有将map的执行结果赋值给原变量,也没有在闭包中返回修改后的数组项,所以原集合不会产生任何变化。
  • 嵌套的spots字段是数组类型,无法直接调用集合的map方法,需要先转为集合实例才能使用集合相关方法。

解决方案

方案1:直接修改原集合(推荐)

使用transform方法,该方法会直接修改原集合本身,不需要额外赋值:

$this->deployments->transform(function ($deployment) {
    // 仅修改第一个spot的status,和你的示例需求一致
    $deployment['spots'][0]['status'] = 'inactive';

    // 如果需要修改所有spot的status,可以用嵌套处理:
    // $deployment['spots'] = collect($deployment['spots'])->map(function ($spot) {
    //     $spot['status'] = 'inactive';
    //     // 可以加条件筛选要修改的spot,比如仅修改id=33的:
    //     // if ($spot['id'] == 33) $spot['status'] = 'inactive';
    //     return $spot;
    // })->toArray();

    return $deployment;
});

方案2:生成新集合

如果你不想修改原集合,而是生成新的处理后的集合,可以继续使用map方法,把处理结果赋值回原变量即可:

$this->deployments = $this->deployments->map(function ($deployment) {
    $deployment['spots'][0]['status'] = 'inactive';
    return $deployment;
});

内容的提问来源于stack exchange,提问作者andcl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:06:05