登录
首页 >  文章 >  php教程

Laravel查询去重技巧全解析

时间:2026-02-04 10:33:51 126浏览 收藏

学习文章要努力,但是不要急!今天的这篇文章《Laravel 查询去重方法详解》将会介绍到等等知识点,如果你想深入学习文章,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

如何在 Laravel 查询中去除重复记录(去重)

本文介绍在 Laravel 中使用 Eloquent 查询时,通过 distinct() 方法快速过滤数据库结果中的重复值,避免相同字段(如 user_id)多次出现。

在 Laravel 开发中,当我们仅需获取某字段的唯一值(例如统计或下拉筛选场景),原始查询可能返回大量重复数据。例如:

$blog = BlogModel::select('user_id')->get();

该语句会返回全部记录,包括重复的 user_id,如 [{"user_id":2},{"user_id":3},{"user_id":4},{"user_id":4},{"user_id":6}]。

要高效去重,推荐使用 Eloquent 提供的 distinct() 方法,它会直接在 SQL 层添加 SELECT DISTINCT,由数据库完成去重,性能优于 PHP 层处理:

$blog = BlogModel::select('user_id')->distinct()->get();

执行后将得到去重后的结果:
[{"user_id":2},{"user_id":3},{"user_id":4},{"user_id":6}]

注意事项:

  • distinct() 作用于 SELECT 的所有列;若 select() 中包含多个字段(如 select('user_id', 'status')),则只有整行完全相同才会被去重;
  • 若仅需单一字段的唯一值(如纯 ID 列表),建议配合 pluck() 使用,更简洁高效:
$userIds = BlogModel::pluck('user_id')->unique(); // PHP 层去重(不推荐大数据量)
// ✅ 更优写法(数据库层去重 + 提取数组):
$userIds = BlogModel::distinct()->pluck('user_id');

⚠️ 避免在 PHP 层用 collect($results)->unique('user_id') 处理大量数据——这会先加载全部记录到内存,造成性能浪费。

总结:优先使用 ->distinct()->get() 或 ->distinct()->pluck('field'),让数据库承担去重职责,兼顾简洁性与执行效率。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>