簡體   English   中英

只獲取laravel今天創建的記錄

[英]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::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();

更新

從 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);

希望它會幫助你

Laravel ^5.6 - 查詢范圍

出於可讀性目的,我使用查詢范圍,使我的代碼更具聲明性。

范圍查詢

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

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())代替

Post::whereDate('created_at', '=', date('Ym-d'))->get();

它會給你今天創建的所有帖子!!!!!! 如果你用這個時間,你會得到那個特定時間而不是今天的帖子

laravel 8

 $VisitorEntryStatusDateCurrent = VisitorEntry::whereDate('created_at', Carbon::today())->get();

$records = User::where('created_at' = CURDATE())->GET()); 打印($記錄);

我在 2022 年 4 月 22 日使用 laravel9,我如何獲得“今天”記錄是:

  1. 我已經在“時區”上編輯了“config/app.php”(大約第 72 行)我已將其設置為我的時區,即“亞洲/曼谷”

  2. 我的查詢代碼是:

    $get = User::whereDate("created_at","=",date("Ymd",time() ) )->get();

將獲得今天創建的字段。

我不知道這是正確的方法還是另一個錯誤的代碼,但只要它對我有用,我會沒事的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM