【问题标题】:Laravel 5 Carbon FormatLaravel 5 碳格式
【发布时间】:2016-04-19 23:30:47
【问题描述】:

编辑:感谢戴维森先生的评论,我将查询更改为:

$query->where(DB::raw('MONTH(date)'), '=', Carbon::parse($month)->format('m'));

操作:

在我的费用概览中,我有一个下拉菜单,我可以在其中选择一个月份,然后只查询该特定月份的结果,如下所示:

$query->where('date', 'LIKE', '%' . Carbon::parse($month)->format('m') . '%');

之前,我的查询是这样的:

$query->where('date', 'LIKE', '%2015-' . Carbon::parse($month)->format('m') . '%');

在我的数据库中,我有一个日期时间字段,因此上述方法有效,但当然它只显示 2015 年的结果。我正在尝试弄清楚如何使用第一个查询来显示 2016 年的结果。

【问题讨论】:

  • 为什么不添加一个下拉列表来选择年份以及默认为当前年份?您实际上是否将日期存储为字符串?如果您以正确的格式存储日期查询,则有比使用 LIKE 查询更好的方法。
  • 谢谢,我应该调查一下,我正在使用 LIKE,因为我仍然是一个 n00b ;) 存储为日期时间顺便说一句。

标签: php laravel parsing format php-carbon


【解决方案1】:

您可以使用whereMonth 方法,而不是使用whereRawLIKE

$query->whereMonth('date', '=', Carbon::parse($month)->format('m'));

因为它更容易阅读。该方法未在Laravel Query Builder Docs 中记录,但您可以查看Query Builder API 以查看方法签名,以及查看在构建查询时可以使用哪些其他方法(因为有很多官方文档中没有描述)。

【讨论】:

  • 仅供参考,使用它产生的 SQL 将类似于select * from "test" where strftime('%m', "date") = ?",您可以将其与whereYear 链接以获得类似select * from "test" where strftime('%m', "date") = ? and strftime('%Y', "date") = ?" 的内容,这应该可以满足您的需求。
  • @MarkDavidson 实际上 whereMonth 使用 MySQL MONTH 函数。所以这将转化为where MONTH(date) = ?
猜你喜欢
  • 2018-03-16
  • 2017-09-06
  • 2014-06-14
  • 2020-02-07
  • 2016-11-08
  • 2021-05-14
  • 2018-08-06
  • 1970-01-01
  • 2018-10-13
相关资源
最近更新 更多