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

如何用Laravel Collection方法替代循环提取指定字段子集?

Laravel集合提取字段子集的优化方案

场景说明

我有一个从API响应获取的Laravel Collection(以下用数组语法近似表示,实际为object类型的Collection,非本地数据库数据):

$rows = [
  [
    'id' => 1,
    'name' => 'Sue',
    'age' => 23,
  ],
  [
    'id' => 2,
    'name' => 'Joe',
    'age' => 25,
  ],
];

需要提取字段的子集,原本通过foreach循环实现:

$subset = [];
foreach ($rows as $row) {
  $subset[] = ['name' => $row['name'], 'age' => $row['age']];
}

期望得到的结果为:

$subset = [
  [
    'name' => 'Sue',
    'age' => 23,
  ],
  [
    'name' => 'Joe',
    'age' => 25,
  ],
];

遇到的问题

尝试用Laravel集合的高阶消息语法实现:

$subset = $rows->map->only(['name', 'age']);

但得到的是全为null的Collection,换成常规map调用也出现同样问题,一度以为需要类似multipluck的功能。

最终解决方案

后来确认map->only的写法本身是正确的,问题出在集合中的对象:这些对象虽属于名为Model的类,但并非Laravel Model类的子类或兼容实现,缺少only方法。给该类添加only方法后,问题顺利解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:30:55