未定义的变量 多个查询范围 拉拉维尔


Undefined Variable Multiple Query Scopes Laravel

这项工作完美:

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) { ... }

正如我所说,这是一个疯狂的猜测,但问题似乎不在于您的查询代码,问题似乎在于您的其余代码依赖于返回一定数量或某些特定行/对象的查询。