本文介绍在 Laravel 中将 Eloquent 查询结果快速转换为纯 ID 数组的两种方式,重点推荐使用 pluck() 方法替代手动 foreach 循环,提升性能与代码简洁性。
本文介绍在
laravel
中将 eloquent 查询结果快速转换为纯 id 数组的两种方式,重点推荐使用 `pluck()` 方法替代手动 foreach 循环,提升性能与代码简洁性。
在 Laravel 开发中,经常需要从数据库查询一批模型并仅提取某个字段(如 id)组成纯数值或字符串数组。例如,你希望从 User 模型中筛选出非指定 ID 且角色为 verified 的用户,并最终得到形如 [5, 76, 33] 的整数数组——而非默认返回的 Eloquent 对象集合 [{ "id": "5" }, { "id": "76" }, ...]。
你当前采用的手动遍历方式虽逻辑正确,但存在明显不足:
该写法的问题在于:
调用 get() 会实例化完整的 Eloquent 模型对象,即使你只用到 id 字段;
take(5) 在集合层面执行(即先查出所有匹配记录再截取),而非 SQL 层限制,效率低下;
需额外循环 + 类型转换,代码冗长且易出错。
✅
推荐方案:使用 pluck() + toArray()
pluck() 是 Laravel 提供的链式方法,直接从查询结果中提取指定字段值,并返回一个 Collection;调用 toArray() 即可获得 PHP 索引数组,且自动处理类型(数据库中 id 为整型时,结果亦为 int):
Laravel 13.2.0
PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
下载
⚠️
进阶提示:
若需在数据库层面限制条数(更高效),应使用 limit(5) 替代 take(5):
若字段可能为 NULL 或需强制整型,可结合 map() 处理:
pluck() 返回的 Collection 支持链式操作(如 filter()、unique()),灵活性远超原始数组。
总结:优先使用 pluck('field')->toArray() 替代手动遍历,既减少内存开销、提升查询效率,又使代码更简洁、可读性更强,是 Laravel 数据提取的标准实践。
$UserNot = [2, 3];
$allverified = [];
$verified = App\Models\User::whereNotIn('id', $UserNot)
->select('id')
->where('role', 'verified')
->get()
->take(5);
foreach ($verified as $veribadge) {
$allverified[] = (int) $veribadge->id; // 注意:还需类型转换以确保整数
}$UserNot = [2, 3];
$allverified = App\Models\User::query()
->whereNotIn('id', $UserNot)
->where('role', 'verified')
->pluck('id') // ← 直接提取 id 列,不实例化模型
->take(5) // ← 在 Collection 层截取(若需 SQL 层分页,请用 `limit(5)`)
->toArray(); // ← 转为纯 PHP 数组:[5, 76, 33]->limit(5)->pluck('id')
->map(fn($id) => (int) $id)
->toArray()