在 Laravel 中对底部为空值和非空值的行进行降序排序

在 laravel 中对底部为空值和非空值的行进行降序排序

使用数据库时,经常会遇到某些字段可能为空或 null 的情况。经常出现的一个挑战是如何对记录进行排序,以便具有空字段的行出现在结果集的底部,而具有非空值的行以有意义的方式排序(例如,降序)。在这篇文章中,我将通过一个实际示例向您展示如何在 laravel 中实现这一目标。

设想

假设您有一个活动的参与者表,每个参与者可能有也可能没有 attend_at 时间戳,它记录了参与者参加活动的时间。您想要列出所有参与者,并按以下方式对它们进行排序:

参加过的参与者(即 attend_at 不为空)首先出现,按最近出席的顺序排序。未参加的参与者(即 attend_at 为空或 null)出现在最后。

问题

默认情况下,laravel 的latest() 方法按给定列按降序对记录进行排序。但是,它不处理某些记录具有 null 或空值的情况。如果您只是使用:

return $this    ->participants()    ->with('user')    ->latest('attended_at')    ->get();

它将使用时间戳对参与者进行排序,但不会将 null 值移动到底部。

解决方案:使用 orderbyraw

我们可以使用 orderbyraw() 方法实现所需的排序。这允许我们使用原始 sql 表达式编写自定义排序逻辑。在这种情况下,我们将根据 attend_at 是否为 null 进行排序,然后根据 attend_at 对非 null 值进行降序排序。

以下是在 laravel 中编写此查询的方法:

return $this    ->participants()    ->with('user')    ->orderByRaw('attended_at IS NULL, attended_at DESC')    ->get()    ->map(function (ActivityParticipant $participant) {        return [            'metric_number' => data_get($participant, 'user.student_id'),            'name' => data_get($participant, 'user.name'),            'status' => data_get($participant, 'status'),            'attended_at' => data_get($participant, 'attended_at', '-'),        ];    })->toArray();

分解查询

orderbyraw(‘attending_at is null, attend_at desc’): attend_at is null:对于 attend_at 为 null 的行,这将返回 true(或 1),否则返回 false(或 0)。这有效地将 null 值放在底部。attend_at desc:处理 null 值后,按降序对具有非空 attend_at 值的剩余行进行排序,这意味着将首先显示最近的出勤率。

最终输出

然后使用map()函数将输出格式化为所需的结构,包括student_id、name和status等字段,并将attent_at时间戳转换为人类可读的格式或“-”(如果是)空的。

这种方法的好处

性能:这种方法利用 sql 的排序功能,使其对于大型数据集非常高效。可读性:使用 orderbyraw() 和原始 sql 表达式可以使代码简洁且易于理解。灵活性:您可以轻松扩展此逻辑以按其他字段排序或包含更复杂的条件。

结论

在 laravel 中处理 null 或空值排序是处理可能并不总是完整的数据时的一项常见任务。通过将 orderbyraw() 方法与 sql 表达式(如 attend_at is null、attend_at desc)结合使用,您可以轻松确保具有 null 值的行出现在底部,同时仍然以有意义的方式对其余数据进行排序。

此方法在处理考勤的场景中特别有用,如本示例所示,但它也可以应用于某些数据字段可能丢失的许多其他情况。通过这种方法,您可以在应用程序中为用户提供更清晰、更直观的记录显示。

编码愉快!

以上就是在 Laravel 中对底部为空值和非空值的行进行降序排序的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1246137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月9日 18:20:04
下一篇 2025年12月9日 06:20:18

相关推荐

  • Ubuntu 中 Laravel 安装步骤

    要在新的 ubuntu 中设置 laravel,请按照以下步骤操作: 步骤一:更新升级系统包 运行以下命令来更新系统的软件包列表并升级已安装的软件包: sudo apt updatesudo apt upgrade 第 2 步:安装 apache(或 nginx) 对于 web 服务器,您可以选择 …

    2025年12月9日
    000
  • 为什么要在 Laravel 中实现存储库模式?

    laravel 中的存储库模式简介 存储库模式是一种设计模式,用于管理数据访问逻辑并将其集中在一个地方。这种模式有助于将检索和保存数据的逻辑与业务逻辑分开,使代码库更加模块化、可重用和可测试。 在 laravel 中,存储库模式可用于抽象与数据模型(如 eloquent 模型)的交互,使您的代码随着…

    2025年12月9日
    000
  • 优化 Laravel 查询:分块数据的正确方法

    为什么应该避免使用块? 最好使用 chunkbyid 而不是 chunk 以避免批量更新时丢失行。使用 chunk 可以在更新行后移动后续查询的偏移量,从而导致跳过未处理的行。 例如: post::where(‘processed’, 0)->chunk(100, function($post…

    2025年12月9日
    000
  • Laravel 中的 defer() 函数如何工作?

    Taylor Otwell 最近宣布了 Laravel 中的新函数 defer()。这只是对 defer() 函数如何工作以及使用它可能遇到的问题进行非常基本的概述。 找出问题还记得您曾经需要从 API 获取某些内容,然后在幕后执行一些用户不关心但仍在等待的操作的路由吗?是的,我们都至少经历过一次,…

    2025年12月9日
    000
  • 拉维尔 |节流|服务提供商|服务容器

    节流或速率限制限制是一种用于限制在特定时间段内向某些路由或控制器发出的请求数量的机制。这通常用于防止滥用或过度使用某些端点、API 或资源。 服务提供商服务提供者是所有 Laravel 应用程序引导的中心位置。您自己的应用程序以及 Laravel 的所有核心服务都是通过服务提供商引导的。“引导”是什…

    2025年12月9日
    000
  • Simples Mudanças, Grandes Impactos: Como Fortalecer a Segurança da Sua Aplicação Laravel

    如果您已经参与过 laravel 项目,您肯定已经注意到该框架如何提供各种有用的开发工具。但是,你有没有想过你是否可能错过了一个错误?在使用这些工具时,您是否最终错过了一些简单但重要的细节来确保系统的安全? 在本文中,我将向您展示一些“简单”的错误,但非常常见且易于解决。 进行安全部署? 在互联网上…

    2025年12月9日
    000
  • 使用 Filament 和 Laravel 构建强大的管理面板:分步指南

    laravel 是一个强大的 php 框架,为开发 web 应用程序提供了坚实的基础。 filament 是一个开源、优雅的 laravel 管理面板和表单构建器,可简化管理界面的创建。本指南将引导您使用最新版本的 filament 和 laravel 构建强大的管理面板。 laravel saas…

    2025年12月9日
    000
  • 关于 PHP 代码安全性您应该了解的内容

    在 web 开发方面,php 是一种广泛使用的脚本语言。随着 php 的流行,了解与 php 相关的潜在安全风险以及缓解这些风险的措施至关重要。无论您使用 wordpress 部署 cms 应用程序还是使用 laravel php 框架构建企业应用程序,php 安全性的重要性以及一些值得注意的 ph…

    2025年12月9日
    000
  • Laravel Cloud:为什么它很重要?

    在最近的 Laracon 大会上,Taylor 向 Laravel 开发者们宣布了 Laravel Cloud,他的愿景是在一分钟之内让一个 Laravel 应用程序从本地到生产,坦白地看了大会上的演示后,这绝对是很快的。 Laravel Cloud 发布后,我们不必担心服务器、AWS、数据库和队列…

    2025年12月9日
    000
  • Laravel Lumen – 在 Plesk 上无法访问存储文件夹

    Laravel Lumen – 在 Plesk 上无法访问存储文件夹 2024 年 9 月 6 日 评论:1 答案:0 -1 我尝试使用符号链接访问存储/公共文件夹,但每当我尝试访问文件时,plesk 似乎都会抛出错误。 我有以下结构:/public 包含到 /storage/app/p…

    2025年12月9日
    000
  • 婴儿学步学习 Laravel

    欢迎回来,开发者! ✨ 在 laravel 之旅的这一章中(请记住,我在撰写这些文章时正在学习,因此这将是您能找到的最现实的教程系列之一!),我们将深入研究我们的 laravel 项目。我们将探索项目结构,熟悉迁移,并以最简单的方式分解 mvc 架构。 ?今天的议程: 探索我们的项目结构 ?️ 了解…

    2025年12月9日
    000
  • 为 Laravel 设置开发环境

    ? 在 windows 上设置 laravel 开发环境 ?️ 嘿开发者! ? 欢迎来到我的新系列,我将深入 laravel 的世界! ? 当我自己学习 laravel 时,我很高兴能分享我迄今为止收集的知识和见解。我的目标是帮助您顺利高效地进入 laravel 开发。 ? 我相信共享学习的力量,因…

    2025年12月9日
    000
  • 用于监控 Laravel Octane 的 NewRelic 替代方案

    我最近有机会讨论巴西开发团队对 inspector 的采用。当时他们正在使用 newrelic 来监控他们的应用程序,但发现它与 laravel octane 不兼容。 自从 laravel octane 发布以来,我就彻底研究了它的内部动态,以确保 inspector laravel 包继续正常工…

    2025年12月9日
    000
  • 掌握 PHP 和 MySQL:现代开发人员的详尽指南

    掌握 php 和 mysql:现代开发人员的详尽指南 ? php 和 mysql 构成了许多动态网站和 web 应用程序的支柱。该综合指南涵盖了先进概念、最佳实践和现代工具,可帮助开发人员充分利用这些技术的潜力。通过详细信息和实用技巧深入了解 php 和 mysql。 1. php 和 mysql …

    2025年12月9日
    000
  • 将 Vuejs 添加到 TALL Stack 项目的好处

    将 Vue.js 添加到 TALL Stack 项目的好处 TALL 堆栈由 Tailwind CSS、Alpine.js、Laravel 和 Livewire 组成,是用于构建现代动态 Web 应用程序的强大工具包。这种组合在开发人员中特别受欢迎,他们欣赏它提供的简化的开发流程,允许以最少的努力创…

    2025年12月9日
    000
  • 掌握代码重构:使用 Rector PHP 的完整指南

    照片由 matteo del piano 在 unsplash 上拍摄 php 校长简介 在不断发展的 php 开发世界中,保持代码库干净、最新且高效至关重要。这就是 rector php 发挥作用的地方。如果您一直想知道如何使用 rector php、如何安装它或者 rector php 到底是什…

    2025年12月9日
    000
  • Hours是一个环境变量,我要使用ENV冷静冷静,我先告诉你一些事情

    我们总是很匆忙,想要尽快开发,而我们经常会采用旧习惯并构建旧软件,我们可以改进的一个项目是这个叫做环境的小东西,让我们了解一下。有关此的更多信息。 首先,我想在这里展示 laravel 配置概念的重点,我不会担心其余的标准,例如资源或其他类似的东西。 1 – 让我们一起寻求知识! 不久前…

    2025年12月9日 好文分享
    000
  • 使用 S3 配置适用于 PHP 的 AWS 开发工具包

    亚马逊网络服务(aws)是一个强大的平台,为开发人员和企业提供广泛的服务。在这些服务中,amazon simple storage service (s3) 是最受欢迎且使用最广泛的服务之一。要以编程方式与 s3 交互,您可以使用适用于 php 的 aws 开发工具包。在本文中,我们将指导您完成使用…

    2025年12月9日
    100
  • 如何修复未根据请求设置会话存储 Laravel

    在 bootstrap/app.php 文件中添加以下代码: use IlluminateSessionMiddlewareStartSession;$middleware->append(StartSession::class); 这是因为我们注册自定义中间件的方式与 laravel 10 …

    2025年12月9日
    100
  • 哪些 PHP 框架支持函数扩展?

    以下 php 框架支持函数扩展:symfonylaravelzend frameworkphalconcodeigniter在这些框架中,使用函数扩展简单,通常涉及创建或注册自定义函数。 PHP 扩展函数:支持框架详解 引言 PHP 扩展函数允许开发人员扩展 PHP 的功能,添加自定义功能。本文将讨…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信