首页 > 解决方案 > Laravel Eloquent 在查询日期格式转换中遇到问题

问题描述

我正在使用 laravel 进行查询并返回符合多个条件的所有结果。其中之一是按日期,问题是我以这种格式将日期存储在数据库中:

2021-03-26 12:20:00

并以这种格式显示它们:

2021 年 3 月 26 日

如果您搜索,该项目的要求是:3 月 26 日

退回给定月份和日期的所有项目

这需要在查询本身中完成,因为我还使用分页和其他搜索和 orderBy 条件

我正在使用这个:

{...}

$attrDate = 'appointment.date';
$query->orWhereDate($attrDate, 'LIKE', ["%{$search}%"]);
$query->orderBy('appointment.date', $order)->take($pagination)->skip($skip);  
$appointments=$query->get();    

{...}

如果我搜索约会日期(2021 年 2 月 26 日 ...)中包含的数字,那将有效

但我也希望能够以字符串格式按月搜索,例如“2021 年 3 月 26 日”或“2021 年 3 月 26 日”,并显示该给定日期的约会。当我尝试这个时,我会在哪里得到错误:

$attrDate = 'appointment.date';
$date_transform= "DATE_FORMAT({$attrDate}, '%F%j,%Y')";   
$query->orWhereDate($date_transform, 'LIKE', ["%{$search}%"]);

它返回带有 sql 错误的代码 500 响应。

我不知道该怎么做,因为所有这些都是项目的要求,我无法真正改变它们。我在 Laravel 文档中进行了搜索,但没有找到任何可以帮助我解决此问题的方法。提前致谢。

标签: laraveleloquentlaravel-query-builder

解决方案


Laravel 也有 eloquent 的方法whereDate / whereMonth / whereDay / whereYear / whereTime,所以你可以使用它们中的任何一个。

$users = DB::table('users')
            ->whereMonth('created_at', '12')
            ->get();

来源:Laravel 文档


推荐阅读