
本文介绍在 Laravel 中将 Eloquent 查询结果中某个字段(如 id)批量提取为纯数值数组的两种方式,重点推荐使用 pluck() 方法替代手动 foreach 循环,以提升性能与代码简洁性。
本文介绍在 laravel 中将 eloquent 查询结果中某个字段(如 id)批量提取为纯数值数组的两种方式,重点推荐使用 `pluck()` 方法替代手动 foreach 循环,以提升性能与代码简洁性。
在 Laravel 开发中,经常需要从数据库查询中提取单一字段(例如用户 ID)并构造成一个简单数组,如将 [{ "id": "5" }, { "id": "76" }, { "id": "33" }] 转换为 [5, 76, 33]。虽然可通过 foreach 遍历集合手动推入数组实现,但这种方式不仅冗余,还会额外实例化完整的模型对象,造成不必要的内存与性能开销。
✅ 推荐方案:使用 pluck() + toArray()
Laravel 的 pluck() 方法专为此类场景设计——它直接从查询结果中提取指定字段,并返回一个 Laravel Collection;再调用 toArray() 即可获得原生 PHP 数组:
$UserNot = [2, 3];
$allverified = App\Models\User::query()
->whereNotIn('id', $UserNot)
->where('role', 'verified')
->pluck('id') // ← 提取所有匹配记录的 'id' 字段(自动转为整型/字符串,取决于数据库类型)
->take(5) // ← 注意:pluck 后调用 take() 仍有效(Laravel 9+ 支持链式 limit)
->toArray(); // ← 转为纯 PHP 索引数组,如 [5, 76, 33]
⚠️ 注意事项:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- pluck('id') 返回的是 Illuminate\Support\Collection,其元素类型与数据库字段实际类型一致(若 id 是整型主键,通常返回整数;若定义为字符串或使用 UUID,则返回字符串)。
- 若需强制转为整数数组,可追加 map(fn($id) => (int) $id)->toArray()。
- take(5) 应置于 pluck() 之前(即 ->get()->take(5))更符合传统习惯,但自 Laravel 9 起,pluck() 后支持 take() 和 limit(),语义更清晰且避免加载多余数据。
- 相比原始 foreach 方案,该写法无需创建 User 模型实例,SQL 层即可完成字段投影,显著减少内存占用与序列化开销。
? 总结:优先使用 pluck() 替代手动循环,既是 Laravel 最佳实践,也体现了“让数据库做它擅长的事”的工程思维。对于简单字段提取需求,永远先问自己:“我是否真的需要整个模型?”










