Laravel与Carbon addMinutes无法正常工作

时间:2017-05-28 11:51:54

标签: php laravel laravel-5 php-carbon

我有一个代表事件的表格,每个事件都有一个通知期,例如如果活动目前在活动开始前不到24小时,您就无法预订活动。

我试图创建一个可预订的'这个范围,但我失败了。具体来说,在下面,' time'表示事件的时间(时间戳),并注意'通知期间,以分钟为单位(整数),两者都是事件模型中的列。我发现的是Laravel没有阅读“#notice”#39;变量,即将其视为0.任何指导都将不胜感激,谢谢。

public function scopeBookable($q) {
    $q->where('time','>',Carbon::now()->addMinutes('notice'))->orderBy('time','ASC')->get();
}

1 个答案:

答案 0 :(得分:5)

addMinutes()方法需要一个不是字符串的整数。

范围选项

您可以将通知时间传递到范围。

// Controller
$notice = 60;
Events::bookable($notice);

// Model
public function scopeBookable($q, $notice=0) {
    $q->where('time','>',Carbon::now()->addMinutes($notice))->orderBy('time','ASC')-get();
}

收藏选项

您始终可以在SQL中执行自联接,并检查子查询中notice的值。另一种选择是返回过滤后的雄辩集合。

public function scopeBookable() {
    return Events::all()->filter(function($event) {
        return $event->time > Carbon::now()->addMinutes($event->notice)
    });
}