我想过滤期间内记录的结果,但我找不到如何使用where子句获取确切数据范围的任何示例。
这些是从表单发布的数据:
[monthRangeStart] => 12
[yearRangeStart] => 2013
[monthRangeEnd] => 12
[yearRangeEnd] => 2013
以下是updated_at时间戳
的格式2013-12-18 07:22:34
我应该如何完成代码行
$trans = Transaction::where('updated_at', )
答案 0 :(得分:3)
在我看来,如果你决定使用某个框架,你应该使用它提供的工具来创建更好的解决方案。 Laravel拥有非常漂亮的Carbon类用于日期操作。这是我来的解决方案:
$trans = Transaction::whereBetween('updated_at', [
\Carbon\Carbon::createFromDate(Input::get('yearRangeStart'), Input::get('monthRangeStart'))->startOfMonth(),
\Carbon\Carbon::createFromDate(Input::get('yearRangeEnd'), Input::get('monthRangeEnd'))->endOfMonth()
])->get();
在这种情况下,您在任何特定月份的天数都不会出错。
答案 1 :(得分:2)
您可以尝试这样的事情
$start = Input::get('yearRangeStart') . '-' . Input::get('monthRangeStart');
$end = Input::get('yearRangeEnd') . '-' . Input::get('monthRangeEnd') . '-' . '31';
$trans = Transaction::whereBetween('updated_at', array($start, $end))->get();
更新:
$start = Input::get('yearRangeStart') . '-' . Input::get('monthRangeStart');
$endYear = Input::get('yearRangeEnd');
$endMonth = Input::get('monthRangeEnd');
$endDays = cal_days_in_month(CAL_GREGORIAN, $endMonth, $endYear);
$end = $endYear . '-' . $endMonth . '-' . $endDays;
$trans = Transaction::whereBetween('updated_at', array($start, $end))->get();
答案 2 :(得分:1)
应该这样做......
$trans = Transaction::where('updated_at', '>', "$yearRangeStart-$monthRangeStart-00 00:00:00")
->where('updated_at', '<', "$yearRangeEnd-$monthRangeEnd-31 99:99:99")
->get();
如果您决定需要按天/小时/分钟/秒进行过滤,则可以随时更换。