无法让 Laravel OrderBy 日期在 Eloquent 语句中工作

Posted

技术标签:

【中文标题】无法让 Laravel OrderBy 日期在 Eloquent 语句中工作【英文标题】:Can't get Laravel OrderBy date to work in Eloquent statement 【发布时间】:2021-03-25 19:02:12 【问题描述】:

我需要按日期顺序提取记录,但是花了几个小时研究这个并在我的代码中尝试了许多方法和变体,但我一无所获。

我需要对left_employer_date 字段进行排序,这是一种VARCHAR 格式。所以我正在尝试将 VARCHAR 转换为 DATE 格式以启用基于日期的排序。

这是我的数据:

Employer name,  Position held,  Hire date,  Left employer date

Harteman Boat Yards,    Foreman,    01/22/1998, 05/23/2005        
Portland Light Rail Services,   Shift Manager,  08/01/2005, 12/31/2018    
US Forest Service,  Game Warden,    01/12/2019, 04/23/2017  

这是我的控制器代码,用于按 left_employer_date 顺序将此数据提取到集合中:

$employment_info = EmploymentHistory::orderBy(DB::raw("DATE_FORMAT(left_employer_date, \"%m/%d/%Y\")"), 'DESC')->get();

我已经尝试了很多变体,并且总是按照输入的顺序(如上所示)获取返回的数据,而不是按日期排序。似乎无论我尝试什么,orderBy 都会被忽略。

我的项目是 Laravel 6 on nginx with MariaDB

非常欢迎任何建议。

【问题讨论】:

【参考方案1】:

DATE_FORMAT 将日期转换为字符串 尝试逆'STR_TO_DATE(str,format)'

更多文档https://mariadb.com/kb/en/str_to_date/

【讨论】:

谢谢,这有效(一旦我从字段名称中删除引号)。不敢相信答案一直盯着我看!

以上是关于无法让 Laravel OrderBy 日期在 Eloquent 语句中工作的主要内容,如果未能解决你的问题,请参考以下文章

OrderBy 与 laravel eloquent 中的“关系”

Laravel 多订单按天分组查看

Laravel AJAX和没有url的分页

php框架 laravel 多重条件查询。对数据库查询,在满足日期范围查询的同时在满足一个或几个条件查询。

Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?

在 Laravel 中的 GroupBy 之前使用 Orderby