Подтвердить что ты не робот

Получить только записи, созданные сегодня в laravel

Как использовать поле created_at для получения только записей, которые были созданы сегодня, и ни одного дня или времени?

Я думал о ->where('created_at', '>=', Carbon::now()) Но я не уверен, что это сработает.

4b9b3361

Ответ 1

для пользователей Laravel 5. 6+ вы можете просто сделать

    $posts = Post::whereDate('created_at', Carbon::today())->get();

Удачного кодирования

Ответ 2

Используйте функцию 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"

Документы для Query Builder

Ответ 3

Если вы используете Carbon (и вы должны, это потрясающе!) с Laravel, вы можете просто сделать следующее:

->where('created_at', '>=', Carbon::today())

Помимо now() и today(), вы также можете использовать yesterday() и tomorrow(), а затем использовать следующее:

  • startOfDay()/<Т26 >
  • startOfWeek()/endOfWeek()
  • startOfMonth()/endOfMonth()
  • startOfYear()/endOfYear()
  • startOfDecade()/endOfDecade()
  • startOfCentury()/endOfCentury()

Ответ 4

с углеродом:

return $model->where('created_at', '>=', \Carbon::today()->toDateString());

без углерода:

return $model->where('created_at', '>=', date('Y-m-d').' 00:00:00');

Ответ 5

Вы можете использовать whereRaw('date(created_at) = curdate()'), если часовой пояс не является проблемой или whereRaw('date(created_at) = ?', [Carbon::now()->format('Y-m-d')] ) в противном случае.

Так как поле created_at является меткой времени, вам нужно получить только часть даты и игнорировать временную часть.

Ответ 6

$today = Carbon\Carbon::now()->format('Y-m-d').'%';
->where('created_at', 'like', $today);

Надеюсь, это поможет вам.

Ответ 7

Нет необходимости использовать Carbon::today потому что laravel использует функцию now() вместо этого как вспомогательную функцию

Таким образом, чтобы получить любые записи, которые были созданы сегодня, вы можете использовать следующий код:

Model::whereDay('created_at', now()->day)->get();

Вам нужно использовать whereDate чтобы whereDate будет преобразован в дату.

Ответ 8

$ records = User :: where ('creation_at' = CURDATE()) → GET()); печать ($ записей);