我想从我的数据库中获取在不同时间开始的任务。即从今天,明天,下周和下个月开始。我试图在我的模型中编写范围来处理,但我真的不知道该怎么做。
这是我的范围方法
/**
* @param $query
* @return mixed
*/
public function scopeToday($query)
{
return $query->where('start_at','=', Carbon::now());
}
/**
* @param $query
* @return mixed
*/
public function scopeTomorrow($query)
{
return $query->where('start_at','=', Carbon::now()->addDay(1));
}
/**
* @param $query
* @return mixed
*/
public function scopeNextWeek($query)
{
return $query->whereRaw('start_at = ?', [Carbon::now()->addWeek()]);
}
/**
* @param $query
* @return mixed
*/
public function scopeNextMonth($query)
{
return $query->where('start_at','=', Carbon::now()->addMonth(1));
}
任何人都知道为什么以上不起作用?
注意:start_at已经是Carbon实例。
答案 0 :(得分:1)
我猜您start_at
字段为datetime type
。这可能会导致比较日期的问题。
您只需将datetime
转换为date
并使用Carbon::today()
代替Carbon::now()
。
public function scopeToday($query)
{
return $query->where( DB::raw('DATE(created_at)') ,'=', Carbon::today());
}
这显示了Carbon::today()
和Carbon::now()
$now = Carbon::now();
echo $now; // 2015-03-26 00:36:47
$today = Carbon::today();
echo $today; // 2015-03-26 00:00:00