这项工作非常完美:
public function scopeHBO($query)
{
return $query ->where('network', '=', "hbo");
}
呼叫控制器:它有效!
$events = Schedule::HBO()->orderBy('searchdate')->get();
当我像这样添加另一个查询范围时:
public function scopeHBO($query)
{
return $query
->where('network', '=', "hbo")
->where('searchdate', '>=', 'NOW()');
}
OR:
public function scopeDate($query)
{
return $query->where('searchdate', '>= ', 'NOW()');
}
然后打电话给控制器:
$events = Schedule::HBO()->Date()->orderBy('searchdate')->get();
我收到错误:未定义的变量:event。我在同一个模型中尝试使用Raw MySql并且它可以工作。每当我添加一个查询范围,无论它是什么...我得到相同的错误未定义的变量:事件。
答案 0 :(得分:2)
NOW()
是一个函数,因此您需要使用原始查询:
where('searchdate', '>=', DB::raw('NOW()'))
然后你可以使用范围。 (请注意,我认为必须将scopeDate
称为date()
,而不是Date()
- 尽管不是100%肯定。)
答案 1 :(得分:0)
这听起来不像是Laravel的一般问题,更像是特定应用程序的问题。
我的猜测(这是一个疯狂的猜测),就是在范围方法中添加第二个where子句
return $query
->where('network', '=', "hbo")
->where('searchdate', '>=', 'NOW()');
最终创建了一个返回0行的SQL查询。然后,在其他代码的某处,您可以执行类似
的操作foreach($events as $event)
{
//...
}
//referencing final $event outside of loop
if($event) { ... }
正如我所说,这是一个疯狂的猜测,但问题似乎不是你的查询代码,问题似乎是你的代码的其余部分依赖于返回一定数量的查询,或者某些特定的行/对象。