[英]Get only records created today in laravel
如何使用created_at
字段僅獲取今天創建的記錄,而不是其他日期或時間?
我在想->where('created_at', '>=', Carbon::now())
但我不確定這是否可行。
對於 Laravel 5.6+ 用戶,你可以這樣做
$posts = Post::whereDate('created_at', Carbon::today())->get();
使用Mysql
默認的CURDATE
函數獲取當天的所有記錄。
$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();
更新
從 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"
如果你在 Laravel 中使用 Carbon(你應該這樣做,它太棒了!),你可以簡單地執行以下操作:
->where('created_at', '>=', Carbon::today())
除了now()
和today()
,您還可以使用yesterday()
和tomorrow()
,然后使用以下內容:
startOfDay()
/ endOfDay()
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('Ym-d')] )
否則。
由於created_at
字段是一個時間戳,因此您只需要獲取其中的日期部分而忽略時間部分。
無需使用Carbon::today
因為 laravel 使用函數 now() 作為輔助函數
因此,要獲取今天創建的任何記錄,您可以使用以下代碼:
Model::whereDay('created_at', now()->day)->get();
您需要使用whereDate
這樣 created_at 將被轉換為日期。
$today = Carbon\Carbon::now()->format('Y-m-d').'%';
->where('created_at', 'like', $today);
希望它會幫助你
出於可讀性目的,我使用查詢范圍,使我的代碼更具聲明性。
namespace App\Models;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
// ...
/**
* Scope a query to only include today's entries.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeCreatedToday($query)
{
return $query->where('created_at', '>=', Carbon::today());
}
// ...
}
MyModel::createdToday()->get()
Sql : select * from "my_models" where "created_at" >= ?
Bindings : ["2019-10-22T00:00:00.000000Z"]
簡單的解決辦法:
->where('created_at', 'like', date("Y-m-d")."%");
我見過有人用原始查詢來做這件事,像這樣:
$q->where(DB::raw("DATE(created_at) = '".date('Y-m-d')."'"));
或者不按日期時間進行原始查詢,如下所示:
$q->where('created_at', '>=', date('Y-m-d').' 00:00:00'));
幸運的是,Laravel Query Builder 提供了一個更 Eloquent 的解決方案:
$q->whereDate('created_at', '=', date('Y-m-d'));
或者,當然,您可以使用Carbon代替 PHP date() :
$q->whereDate('created_at', '=', Carbon::today()->toDateString());
這不僅是 whereDate。 還有三個更有用的函數可以過濾掉日期:
$q->whereDay('created_at', '=', date('d'));
$q->whereMonth('created_at', '=', date('m'));
$q->whereYear('created_at', '=', date('Y'));
下面的代碼對我有用
$today_start = Carbon::now()->format('Y-m-d 00:00:00');
$today_end = Carbon::now()->format('Y-m-d 23:59:59');
$start_activity = MarketingActivity::whereBetween('created_at', [$today_start, $today_end])
->orderBy('id', 'ASC')->limit(1)->get();
Carbon::today() 將返回如下內容: 2021-08-06T00:00:00.000000Z
,因此使用Model::where('created_at', Carbon::today())
將只返回恰好在 12 處創建的記錄:當前日期上午 00 點。
使用Model::where('created_at', '>=', Carbon::today())
代替
它會給你今天創建的所有帖子!!!!!! 如果你用這個時間,你會得到那個特定時間而不是今天的帖子
laravel 8
$VisitorEntryStatusDateCurrent = VisitorEntry::whereDate('created_at', Carbon::today())->get();
$records = User::where('created_at' = CURDATE())->GET()); 打印($記錄);
我在 2022 年 4 月 22 日使用 laravel9,我如何獲得“今天”記錄是:
我已經在“時區”上編輯了“config/app.php”(大約第 72 行)我已將其設置為我的時區,即“亞洲/曼谷”
我的查詢代碼是:
$get = User::whereDate("created_at","=",date("Ymd",time() ) )->get();
將獲得今天創建的字段。
我不知道這是正確的方法還是另一個錯誤的代碼,但只要它對我有用,我會沒事的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.