0

我想从我的数据库中获取在不同时间开始的任务。即从今天、明天、下周和下个月开始。我试图在我的模型中编写范围来处理它,但我真的不知道该怎么做。

这是我的范围方法

/**
 * @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 实例。

4

1 回答 1

1

我猜你start_at的领域是datetime type. 这可能会导致比较日期出现问题。

您需要转换datetimedateonly 并使用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

来源:http ://carbon.nesbot.com/docs/#api-instantiation

于 2015-04-16T08:25:09.613 回答