如何使用 created_at
字段仅获取今天创建的记录,而不是其他日期或时间?
我考虑使用 ->where('created_at', '>=', Carbon::now())
但我不确定它是否有效。
如何使用 created_at
字段仅获取今天创建的记录,而不是其他日期或时间?
我考虑使用 ->where('created_at', '>=', Carbon::now())
但我不确定它是否有效。
对于 Laravel 5.6+ 用户,你只需执行以下操作:
$posts = Post::whereDate('created_at', Carbon::today())->get();
Post :: whereDate('created_at','=',Carbon :: today())
- Tschallacka使用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();
更新
从laravel5.3开始,我们有默认的”where”子句:whereDate / whereMonth / whereDay / whereYear
$users = User::whereDate('created_at', DB::raw('CURDATE()'))->get();
使用DB
门面进行OR操作
$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"
CURDATE()
,您将获得由数据库定义的“今天”,即在数据库时区中的当天日期。但是,您的用户可能位于不同的时区,甚至可能位于不同的时间区域。要获取用户所在时区的当前日期,您可以执行类似以下示例的操作:DATE(CONVERT_TZ(NOW(),@@session.time_zone,'Europe/Berlin'))
,这需要设置MySQL时区表。或者,您可以像下面描述的那样使用Carbon库。 - Christopher K.如果你正在使用 Carbon(你应该使用,它非常棒!)和 Laravel,你可以简单地执行以下操作:
->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('Y-m-d')] )
否则。
由于created_at
字段是时间戳,因此您需要仅获取其日期部分并忽略时间部分。
Argument 2 passed to Illuminate\Database\Query\Builder::whereRaw() must be of the type array, string given
- TheWebs为了提高可读性,我使用查询作用域,让我的代码更具声明性。
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"]
$today = Carbon\Carbon::now()->format('Y-m-d').'%';
->where('created_at', 'like', $today);
希望这能对您有所帮助。
不需要使用 Carbon::today
,因为 Laravel 使用 now() 函数作为帮助函数。
因此,要获取任何已创建的记录,请使用以下代码:
Model::whereDay('created_at', now()->day)->get();
您需要使用 whereDate
函数,这样 created_at 就会被转换为日期。
whereDay
只会检查一个月中的特定日期,每个月至少有28天。 - Orkhan Alikhanov简单解决方案:
->where('created_at', 'like', date("Y-m-d")."%");
Laravel 8
$VisitorEntryStatusDateCurrent = VisitorEntry::whereDate('created_at', Carbon::today())->get();