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