【问题标题】:Having a problem with Laravel Eloquent in query date format transformationLaravel Eloquent 在查询日期格式转换中遇到问题
【发布时间】:2021-06-29 14:10:59
【问题描述】:

我正在使用 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 文档中进行了搜索,但没有找到任何可以帮助我解决此问题的方法。提前致谢。

【问题讨论】:

  • 就我而言,我会使用 laravel 时间戳格式进行正常搜索,但是在返回结果时,我会使用 getter 对其进行格式化。同样,当我进行搜索时:我将值格式化为我的格式,而用户认为它将按照他们的需要进行搜索。但我不知道这对你有用

标签: laravel eloquent laravel-query-builder


【解决方案1】:

我个人建议使用 carbon 的解析器,例如

$attrDate = 'appointment.date';
$dateSearch = Carbon::parse($search);
$query->orWhereDate($attrDate, $dateSearch);
$query->orderBy('appointment.date', $order)->take($pagination)->skip($skip);  
$appointments=$query->get();  

这会将问题转移到 Carbon 的日期解析(这非常好)。这里的问题是它将假定年份而不是搜索任何年份

【讨论】:

  • 非常感谢您的回复。我最终使用了自定义转换,因为用户必须能够按字符串搜索,而且搜索字符串可能不是有效日期,只是其中的一部分。
【解决方案2】:

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

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

来源:Laravel Docs

【讨论】:

    猜你喜欢
    • 2018-10-06
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2012-04-16
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多