我有一个代表事件的表格,每个事件都有一个通知期,例如如果活动目前在活动开始前不到24小时,您就无法预订活动。
我试图创建一个可预订的'这个范围,但我失败了。具体来说,在下面,' time'表示事件的时间(时间戳),并注意'通知期间,以分钟为单位(整数),两者都是事件模型中的列。我发现的是Laravel没有阅读“#notice”#39;变量,即将其视为0.任何指导都将不胜感激,谢谢。
public function scopeBookable($q) {
$q->where('time','>',Carbon::now()->addMinutes('notice'))->orderBy('time','ASC')->get();
}
答案 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)
});
}