global scopes
1編寫 2應用 3匿名 4移除
1.編寫
定義一個實現(xiàn) Illuminate\Database\Eloquent\Scope 接口的類蒂萎,該接口要求你實現(xiàn)一個方法:apply。需要的話可以在 apply 方法中添加 where 條件到查詢:
如 <code>return $builder->where('age',>,200);</code>
2 應用
需要重寫給定模型的 boot 方法并使用 addGlobalScope 方法
AgeScope就是編寫的類
<code>static::addGlobalScope(new AgeScope);</code>
添加作用域后孽锥,如果使用 User::all() 查詢則會生成如下SQL語句:
<code>select * fromusers
whereage
> 200</code>
3 匿名
意思是無需編寫新建一個實現(xiàn)Scope接口的類,而是以匿名函數(shù)的方式實現(xiàn)
<code>
static::addGlobalScope('age', function(Builder $builder) {
$builder->where('age', '>', 200);
});
</code>
利用 age 標識符來移除全局作用
<code>User::withoutGlobalScope('age')->get();</code>
4移除
查詢時加上withoutGlobalScope或者withoutGlobalScopes
對應單個或者多個查詢作用域
local scopes
在模型中定義方法以scope開頭,如scopeActive()
在查詢的時候我們可以這樣寫:
<code>User::active()->all()</code>
我們也可以提供參數(shù)查詢
我們scopeOftype($query,$type)里的$type就是一個動態(tài)參數(shù)