Как использовать поле created_at
для получения только записей, которые были созданы сегодня, и ни одного дня или времени?
Я думал о ->where('created_at', '>=', Carbon::now())
Но я не уверен, что это сработает.
Как использовать поле created_at
для получения только записей, которые были созданы сегодня, и ни одного дня или времени?
Я думал о ->where('created_at', '>=', Carbon::now())
Но я не уверен, что это сработает.
для пользователей Laravel 5. 6+ вы можете просто сделать
$posts = Post::whereDate('created_at', Carbon::today())->get();
Удачного кодирования
Используйте функцию CURDATE
Mysql
умолчанию, чтобы получить все записи дня.
$records = DB::table('users')->select(DB::raw('*'))
->whereRaw('Date(created_at) = CURDATE()')->get();
dd($record);
Заметка
Разница между Carbon::now
и Carbon::today
- просто время.
например
Дата, напечатанная через Carbon::now
будет выглядеть примерно так:
2018-06-26 07:39:10.804786 UTC (+00:00)
Пока с Carbon::today
:
2018-06-26 00:00:00.0 UTC (+00:00)
Чтобы получить единственные записи, созданные сегодня, now
можно получить как:
Post::whereDate('created_at', Carbon::now()->format('m/d/Y'))->get();
пока с today
:
Post::whereDate('created_at', Carbon::today())->get();
ОБНОВИТЬ
Начиная с версии 5.3, у нас есть предложение по умолчанию whereDate/whereMonth/whereDay/whereYear
$users = User::whereDate('created_at', DB::raw('CURDATE()'))->get();
ИЛИ с фасадом DB
$users = DB::table('users')->whereDate('created_at', DB::raw('CURDATE()'))->get();
Использование вышеперечисленных пунктов
$users = User::whereMonth('created_at', date('m'))->get();
//or you could also just use $carbon = \Carbon\Carbon::now(); $carbon->month;
//select * from 'users' where month('created_at') = "04"
$users = User::whereDay('created_at', date('d'))->get();
//or you could also just use $carbon = \Carbon\Carbon::now(); $carbon->day;
//select * from 'users' where day('created_at') = "03"
$users = User::whereYear('created_at', date('Y'))->get();
//or you could also just use $carbon = \Carbon\Carbon::now(); $carbon->year;
//select * from 'users' where year('created_at') = "2017"
Если вы используете Carbon (и вы должны, это потрясающе!) с Laravel, вы можете просто сделать следующее:
->where('created_at', '>=', Carbon::today())
Помимо now()
и today()
, вы также можете использовать yesterday()
и tomorrow()
, а затем использовать следующее:
startOfDay()
/<Т26 > startOfWeek()
/endOfWeek()
startOfMonth()
/endOfMonth()
startOfYear()
/endOfYear()
startOfDecade()
/endOfDecade()
startOfCentury()
/endOfCentury()
с углеродом:
return $model->where('created_at', '>=', \Carbon::today()->toDateString());
без углерода:
return $model->where('created_at', '>=', date('Y-m-d').' 00:00:00');
Вы можете использовать whereRaw('date(created_at) = curdate()')
, если часовой пояс не является проблемой или whereRaw('date(created_at) = ?', [Carbon::now()->format('Y-m-d')] )
в противном случае.
Так как поле created_at
является меткой времени, вам нужно получить только часть даты и игнорировать временную часть.
$today = Carbon\Carbon::now()->format('Y-m-d').'%';
->where('created_at', 'like', $today);
Надеюсь, это поможет вам.
Нет необходимости использовать Carbon::today
потому что laravel использует функцию now() вместо этого как вспомогательную функцию
Таким образом, чтобы получить любые записи, которые были созданы сегодня, вы можете использовать следующий код:
Model::whereDay('created_at', now()->day)->get();
Вам нужно использовать whereDate
чтобы whereDate
будет преобразован в дату.
$ records = User :: where ('creation_at' = CURDATE()) → GET()); печать ($ записей);