Laravel在哪里用碳addMinutes不起作用

use*_*500 3 php laravel php-carbon laravel-5

我有一个表示事件的表,每个表都有一个通知期,例如,如果当前距事件不到24小时,则您不能预订该事件。

我正在尝试为此创建一个“可预订”范围,但失败了。具体而言,在下面,“时间”代表事件的时间(时间戳),“通知”通知期限,以分钟(整数)为单位,这两个都是事件模型中的列。我发现,Laravel没有读取'notice'变量,即将其视为0。感谢您提供任何指导。

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

Dov*_*ski 7

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();
}
Run Code Online (Sandbox Code Playgroud)

收集选项

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

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