只获取今天在laravel中创建的记录

The*_*ebs 43 mysql activerecord date where laravel-5.1

如何使用该created_at字段仅获取今天创建的记录,而不是其他日期或时间?

我在想一个->where('created_at', '>=', Carbon::now())但是我不确定它会起作用.

ash*_*ish 77

对于Laravel 5.6用户,你可以这样做

    $posts = Post::whereDate('created_at', Carbon::today())->get();
Run Code Online (Sandbox Code Playgroud)

  • 响应的问题在于,假设数据库和服务器使用相同的时区.虽然时间戳是从服务器设置的,但实际上不是问题. (5认同)

Cle*_*ode 53

使用Mysql默认CURDATE功能获取当天的所有记录.

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

注意

Carbon::nowvs 之间的区别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();

UPDATE

从laravel 5.3开始,我们有默认的where子句 whereDate / whereMonth / whereDay / whereYear

$users = User::whereDate('created_at', DB::raw('CURDATE()'))->get();
Run Code Online (Sandbox Code Playgroud)

或与DB外观

$users = DB::table('users')->whereDate('created_at', DB::raw('CURDATE()'))->get();
Run Code Online (Sandbox Code Playgroud)

使用上面列出的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"
Run Code Online (Sandbox Code Playgroud)

查询生成器文档


小智 35

如果你在Laravel中使用Carbon(你应该,它真棒!),你可以简单地做到以下几点:

->where('created_at', '>=', Carbon::today())
Run Code Online (Sandbox Code Playgroud)

除了now()today(),你也可以使用yesterday()tomorrow()再使用以下命令:

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


Mah*_*alt 11

含碳:

return $model->where('created_at', '>=', \Carbon::today()->toDateString());
Run Code Online (Sandbox Code Playgroud)

没有碳:

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

  • 我使用第二个选项为今天发生的所有约会创建一个范围. (2认同)

San*_*ruz 5

whereRaw('date(created_at) = curdate()')如果时区不是问题或whereRaw('date(created_at) = ?', [Carbon::now()->format('Y-m-d')] )其他原因,您可以使用.

由于该created_at字段是时间戳,因此您只需要获取其日期部分并忽略时间部分.


che*_*aby 5

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());
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

使用示例

MyModel::createdToday()->get()
Run Code Online (Sandbox Code Playgroud)

生成的 SQL

Sql      : select * from "my_models" where "created_at" >= ?

Bindings : ["2019-10-22T00:00:00.000000Z"]
Run Code Online (Sandbox Code Playgroud)