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'));
}
答案 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()的方法,如果有的话 - 它只是调用它并自己传递(即查询)。