web-dev-qa-db-ja.com

laravelで今日作成されたレコードのみを取得する

created_atフィールドを使用して、今日作成されたレコードのみを取得し、他の曜日または時刻を取得しないようにするにはどうすればよいですか?

私は->where('created_at', '>=', Carbon::now())を考えていましたが、それがうまくいくかどうかはわかりません。

40
TheWebs

Laravel 5.6人以上のユーザーの場合、次のようにできます。

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

ハッピーコーディング

67
ashish

Mysql default CURDATE関数を使用して、その日のすべてのレコードを取得します。

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

Carbon::nowCarbon::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();

UPDATE

laravel 5.3現在、デフォルトのwhere節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();

上記のwhere句の使用法

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

クエリビルダードキュメント

53
Clean code

LaravelでCarbonを使用している場合(そして、それは素晴らしいはずです!)、次のことを行うことができます。

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

now()today()に加えて、yesterday()tomorrow()を使用して、次を使用することもできます。

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

カーボンあり:

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

炭素なし:

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

タイムゾーンが重要でない場合は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);

それがあなたを助けることを願っています

2