问题不在于 Laravel 本身,而在于 Carbon。
使用以下代码时:
use Carbon\Carbon;
$date = new Carbon('2014-10-07');
$start = $date->startOfDay();
$end = $date->endOfDay();
echo $start.' '.$end;
你得到的是:
2014-10-07 23:59:59 2014-10-07 23:59:59
所以 Laravel 会执行查询:
select * from `users` where `created_at` >'2014-10-07 23:59:59' and `created_at` <'2014-10-07 23:59:59';
显然你不会得到任何结果。
如您所见,$start
结果不是您在这里所期望的。
为了使它起作用,我发现的解决方案是创建 2 个碳对象:
use Carbon\Carbon;
$date = new Carbon('2014-10-07');
$date2 = new Carbon('2014-10-07');
$start = $date->startOfDay();
$end = $date2->endOfDay();
echo $start.' '.$end;
现在结果如预期:
2014-10-07 00:00:00 2014-10-07 23:59:59
现在您可以使用:
use Carbon\Carbon;
$date = new Carbon('2014-10-07');
$date2 = new Carbon('2014-10-07');
$users = User::where('created_at', '>', $date->startOfDay())
->where('created_at', '<', $date2->endOfDay())
->get();
或者
use Carbon\Carbon;
$date = new Carbon('2014-10-07');
$date2 = new Carbon('2014-10-07');
$users = User::whereBetween('created_at', [$date->startOfDay(), $date2->endOfDay()])->get();