2016-03-02 148 views
0
public function scopePublished($query) { 

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

    } 

$查詢參數是如何通過這裏的?該函數是否將參數$ query傳遞給它自己?

下面是函數調用:

public function index() { 

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

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

} 
+5

這不是一個編程問題。查看[Laravel的源代碼](https://github.com/laravel/framework/tree/5.2/src/Illuminate/Database/Eloquent),如果你有興趣瞭解它如何工作。 –

回答

1

Model類本身傳遞的一切都缺少方法調用,除了increment()decrement(),底層查詢對象。這是通過魔術__call()__callStatic()方法完成的。

查詢對象,\Illuminate\Database\Eloquent\Builder,然後執行此:

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

即它會檢查是否有與範圍()可在模型前綴方法名的方法,以及如果是的話 - 這只是簡單地調用它並傳遞它自己(即查詢)。