在
laravel
中,可通过链式调用 `distinct()` 方法对 eloquent 查询结果去重,避免同一字段(如 `user_id`)出现重复记录,简洁高效地返回唯一值集合。
当你执行类似 $blog = BlogModel::select('user_id')-youjiankuohao
php
cnget(); 的查询时,若数据库中存在多条 user_id 相同的记录,结果会包含重复项(例如 [{"user_id":2},{"user_id":3},{"user_id":4},{"user_id":4},{"user_id":6}])。此时,只需在 select() 后添加 distinct() 即可实现去重:
✅ 输出结果将变为:
⚠️ 注意事项:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
distinct() 作用于
所选字段的组合
。若 select() 中包含多个字段(如 select('user_id', 'status')),则只有当所有指定字段值完全相同时才会被去重;
若仅需获取去重后的纯数值数组(如 [2, 3, 4, 6]),可进一步使用 pluck() 和 unique() 组合:
但更推荐直接使用 distinct() + pluck() 提升效率:
distinct() 是 SQL 层面的去重(生成 SELECT DISTINCT user_id ...),性能优于 PHP 层遍历过滤,尤其适合
大数据
量场景。
总之,distinct() 是 Laravel 中处理字段级去重最标准、最高效的方式,应优先用于数据库查询阶段,而非在 PHP 中后处理。
$blog = BlogModel::select('user_id')->distinct()->get();[{"user_id":2},{"user_id":3},{"user_id":4},{"user_id":6}]$userIds = BlogModel::pluck('user_id')->unique()->values()->toArray();$userIds = BlogModel::select('user_id')->distinct()->pluck('user_id')->toArray();