Laravel查询范围 - 如何传递$ query属性?

时间:2016-03-02 10:22:28

标签: laravel

public function scopePublished($query) {

         $query->where('published_at', '<=', Carbon::now());

     }

如何在此处传递$ query参数?该函数是否将参数$ query传递给自身?

这是函数调用:

public function index() {

    $articles = Article::latest('published_at')->published()->get();

    return view('articles.index', compact('articles'));

}

1 个答案:

答案 0 :(得分:1)

Model类本身将所有缺少的方法调用(increment()decrement()除外)传递给基础Query对象。这是通过魔术__call()__callStatic()方法完成的。

Query对象\Illuminate\Database\Eloquent\Builder然后执行此操作:

    if (method_exists($this->model, $scope = 'scope'.ucfirst($method))) {
        return $this->callScope($scope, $parameters);
    }

即它检查模型上是否有方法名称前缀为scope()的方法,如果有的话 - 它只是调用它并自己传递(即查询)。