我有一个代表事件的表格,每个事件都有一个通知期,例如如果活动目前在活动开始前不到24小时,您就无法预订活动.
我正试图为此创建一个“可预订”的范围,但我失败了.具体来说,在下面,’time’表示事件的时间(timestamp),’notice’表示通知期间,以分钟为单位(整数),两者都是Events模型中的列.我发现Laravel没有阅读’通知’变量,即将其视为0.任何指导都将不胜感激,谢谢.
public function scopeBookable($q) {
$q->where('time','>',Carbon::now()->addMinutes('notice'))->orderBy('time','ASC')->get();
}
解决方法:
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中执行自联接并检查子查询中的通知值.另一种选择是返回过滤后的雄辩集合.
public function scopeBookable() {
return Events::all()->filter(function($event) {
return $event->time > Carbon::now()->addMinutes($event->notice)
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。