web-dev-qa-db-fra.com

Obtenez uniquement les enregistrements créés aujourd'hui dans laravel

Comment utiliser le champ created_at Pour obtenir uniquement les enregistrements créés aujourd'hui, sans autre jour ni heure?

Je pensais à une ->where('created_at', '>=', Carbon::now()) mais je ne suis pas sûr que cela fonctionnerait.

40
TheWebs

pour Laravel 5.6+ utilisateurs, vous pouvez simplement faire

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

Code heureux

67
ashish

Utilisez la fonction Mysql par défaut CURDATE pour obtenir tous les enregistrements de la journée.

    $records = DB::table('users')->select(DB::raw('*'))
                  ->whereRaw('Date(created_at) = CURDATE()')->get();
    dd($record);

Remarque

La différence entre Carbon::now Vs Carbon::today Est juste le temps.

par exemple

La date imprimée avec Carbon::now Ressemblera à quelque chose:

2018-06-26 07:39:10.804786 UTC (+00:00)

Alors que avec Carbon::today:

2018-06-26 00:00:00.0 UTC (+00:00)

Pour obtenir les seuls enregistrements créés aujourd'hui avec now, procédez comme suit:

Post::whereDate('created_at', Carbon::now()->format('m/d/Y'))->get();

avec today:

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

[~ # ~] met à jour [~ # ~]

À partir de laravel 5.3, Nous avons la clause default où whereDate / whereMonth / whereDay / whereYear

$users = User::whereDate('created_at', DB::raw('CURDATE()'))->get();

OU avec la façade DB

$users = DB::table('users')->whereDate('created_at', DB::raw('CURDATE()'))->get();

Utilisation des clauses where énumérées ci-dessus

$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"

Docs Builder de requêtes

53
Clean code

Si vous utilisez Carbon (et vous devriez, c'est génial!) Avec Laravel, vous pouvez simplement faire ce qui suit:

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

Outre now() et today(), vous pouvez également utiliser yesterday() et tomorrow(), puis les éléments suivants:

  • startOfDay()/endOfDay()
  • startOfWeek()/endOfWeek()
  • startOfMonth()/endOfMonth()
  • startOfYear()/endOfYear()
  • startOfDecade()/endOfDecade()
  • startOfCentury()/endOfCentury()
33
Itai Nathaniel

avec du carbone:

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

sans carbone:

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

Vous pouvez utiliser whereRaw('date(created_at) = curdate()') si le fuseau horaire n'est pas une préoccupation ou whereRaw('date(created_at) = ?', [Carbon::now()->format('Y-m-d')] ) sinon.

Depuis le created_at _ champ est un horodatage, vous devez obtenir uniquement la partie date et ignorer la partie heure.

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

J'espère que cela vous aidera

2