这项工作完美:
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()');
}
或:
public function scopeDate($query)
{
return $query->where('searchdate', '>= ', 'NOW()');
}
然后呼叫控制器:
$events = Schedule::HBO()->Date()->orderBy('searchdate')->get();
我收到一个错误:未定义的变量:事件。我尝试在同一模型中使用Raw MySql,它可以工作。每当我添加查询范围时,它是什么都无关紧要。我得到同样的错误 未定义的变量:事件。
NOW()
是一个函数,因此您需要使用原始查询:
where('searchdate', '>=', DB::raw('NOW()'))
然后,您可以使用范围。(请注意,我认为scopeDate
必须被称为date()
,而不是Date()
- 虽然不是100%确定。
这听起来不像是 Laravel 的通用问题,而更像是特定应用程序的问题。
我的猜测(这是一个疯狂的猜测)是在您的范围方法中添加第二个 where 子句
return $query
->where('network', '=', "hbo")
->where('searchdate', '>=', 'NOW()');
最终创建了一个返回 0 行的 SQL 查询。 然后,在其他代码中的某个地方,您正在执行类似
foreach($events as $event)
{
//...
}
//referencing final $event outside of loop
if($event) { ... }
正如我所说,这是一个疯狂的猜测,但问题似乎不在于您的查询代码,问题似乎在于您的其余代码依赖于返回一定数量或某些特定行/对象的查询。