在專案中 經常會面對一些條件的查詢,這些查詢條件好些是相同的。scope可以實現這些相同條件的複用.
普通scope
定義,函式名稱為scope+首字母大寫Active(這個名稱隨意)
public function scopeActive($query)
{
return $query->where('active',1);
}
使用,正常使用,其中呼叫去掉scope後,首字母小寫的那個函式。scopeActive()呼叫active()。
$user = \App\User::popular()->active()->orderBy('created_at','desc')->get();
全域性scope
protected static function boot()
{
parent::boot(); // TODO: Change the autogenerated stub
static::addGlobalScope('avaiable',function (Builder $builder){
$builder->whereIn('status',[0,1]);
});
}
我們需要重新定義boot方法,整合父類boot以後,新增全域性scope,這樣預設就已經全域性使用了。
那麼,我們有的時候有的查詢是不需要這個全域性scope的時候怎麼辦呢?去掉就可以
$posts = Post::withOutGlobalScope('avaiable')->orderBy('created_at','desc')->paginate(10);