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

发布时间 - 2026-02-01 00:00:00    点击率:

本文介绍在 laravel 中使用 distinct() 方法过滤数据库查询结果,避免返回重复值,特别适用于只需

获取唯一字段(如 user_id)的场景。

在 Laravel 的 Eloquent 查询中,当需要从数据库中提取某字段的唯一值(例如获取所有有博客文章的用户 ID),而原始数据存在重复时,直接调用 get() 会返回包含重复项的结果集。此时,不应依赖 PHP 层去重(如 array_unique() 或集合的 unique()),而应优先利用数据库的原生能力——DISTINCT 关键字,既高效又语义清晰。

Laravel 提供了链式方法 distinct(),可直接追加在查询构造器后,确保 SQL 语句中生成 SELECT DISTINCT。例如:

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

执行后将返回:

[{"user_id":2},{"user_id":3},{"user_id":4},{"user_id":6}]

优势说明

  • 数据库层面去重,减少网络传输与 PHP 内存开销;
  • 语义明确,代码可读性强;
  • 支持与其他查询条件组合,如:
    $activeUserIds = BlogModel::where('status', 'published')
        ->select('user_id')
        ->distinct()
        ->get();

⚠️ 注意事项

  • distinct() 作用于整个 SELECT 列表,若同时选择多个字段(如 select('user_id', 'created_at')),则仅当所有选定字段组合完全相同时才视为重复;
  • 若仅需纯数值数组(如 [2, 3, 4, 6]),可进一步使用 pluck('user_id'):
    $userIds = BlogModel::select('user_id')->distinct()->pluck('user_id');
    // 返回 Illuminate\Support\Collection: [2, 3, 4, 6]

综上,distinct() 是处理去重需求最直接、最推荐的 Laravel 官方方案,兼顾性能、简洁性与可维护性。


# php  # laravel  # 代码可读性  # sql  # 数值数组  # select  # 数据库  # 链式  # 多个  # 只需  # 适用于  # 不应  # 后将  # 可直接  # 时才  # 数据库中  # 仅需 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 北京的网站制作公司有哪些,哪个视频网站最好?  Python进程池调度策略_任务分发说明【指导】  Laravel如何为API编写文档_Laravel API文档生成与维护方法  如何在阿里云香港服务器快速搭建网站?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  QQ浏览器网页版登录入口 个人中心在线进入  bootstrap日历插件datetimepicker使用方法  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel Fortify是什么,和Jetstream有什么关系  北京企业网站设计制作公司,北京铁路集团官方网站?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  详解Huffman编码算法之Java实现  高防服务器租用首荐平台,企业级优惠套餐快速部署  Laravel怎么为数据库表字段添加索引以优化查询  如何批量查询域名的建站时间记录?  详解Android中Activity的四大启动模式实验简述  如何在建站主机中优化服务器配置?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Python并发异常传播_错误处理解析【教程】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  中山网站推广排名,中山信息港登录入口?  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  在centOS 7安装mysql 5.7的详细教程  Laravel如何保护应用免受CSRF攻击?(原理和示例)  成都网站制作公司哪家好,四川省职工服务网是做什么用?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  php 三元运算符实例详细介绍  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  深圳网站制作的公司有哪些,dido官方网站?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何在云主机上快速搭建网站?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel安装步骤详细教程_Laravel环境搭建指南  香港服务器WordPress建站指南:SEO优化与高效部署策略  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  iOS验证手机号的正则表达式  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何在宝塔面板中创建新站点?