
在 laravel 中,可通过链式调用 `distinct()` 方法对 eloquent 查询结果去重,避免同一字段(如 `user_id`)出现重复记录,简洁高效地返回唯一值集合。
当你执行类似 $blog = BlogModel::select('user_id')->get(); 的查询时,若数据库中存在多条 user_id 相同的记录,结果会包含重复项(例如 [{"user_id":2},{"user_id":3},{"user_id":4},{"user_id":4},{"user_id":6}])。此时,只需在 select() 后添加 distinct() 即可实现去重:
$blog = BlogModel::select('user_id')->distinct()->get();✅ 输出结果将变为:
[{"user_id":2},{"user_id":3},{"user_id":4},{"user_id":6}]⚠️ 注意事项:
- distinct() 作用于 所选字段的组合。若 select() 中包含多个字段(如 select('user_id', 'status')),则只有当所有指定字段值完全相同时才会被去重;
- 若仅需获取去重后的纯数值数组(如 [2, 3, 4, 6]),可进一步使用 pluck() 和 unique() 组合:
$userIds = BlogModel::pluck('user_id')->unique()->values()->toArray();但更推荐直接使用 distinct() + pluck() 提升效率:
$userIds = BlogModel::select('user_id')->distinct()->pluck('user_id')->toArray(); - distinct() 是 SQL 层面的去重(生成 SELECT DISTINCT user_id ...),性能优于 PHP 层遍历过滤,尤其适合大数据量场景。
总之,distinct() 是 Laravel 中处理字段级去重最标准、最高效的方式,应优先用于数据库查询阶段,而非在 PHP 中后处理。










