未定义的变量多个查询范围Laravel

时间:2015-01-12 20:18:51

标签: php 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()');
}

OR:

public function scopeDate($query)
{
    return $query->where('searchdate', '>= ', 'NOW()');
}

然后打电话给控制器:

$events = Schedule::HBO()->Date()->orderBy('searchdate')->get();

我收到错误:未定义的变量:event。我在同一个模型中尝试使用Raw MySql并且它可以工作。每当我添加一个查询范围,无论它是什么...我得到相同的错误未定义的变量:事件。

2 个答案:

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

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