Laravel模型的scope過濾

寫在模型中,供模型調(diào)用(和關(guān)聯(lián)查詢類似),來判斷是否有沒有這個(gè)范圍

一、語法

public function scopeActive(Builder $query,  參數(shù)){
  return $query->where('active', 1);
}

public function articleTopics(){
        return $this->hasMany('App\Http\Model\ArticleTopic','article_id','id');
}
doesntHave中第一個(gè)參數(shù)為關(guān)聯(lián)模型
public function scopeTopicNotBy(Builder $query, $topic_id){
        return $query->doesntHave('articleTopics','and', function($q)use($topic_id){
            $q->where('topic_id', $topic_id);
        });
 }

解析:
必須以scope開頭。后面第一個(gè)字母大寫。
后面括號(hào)中第一個(gè)必須是Builder,第二個(gè)參數(shù)可以根據(jù)需要定義。
返回值也必須是Builder

二、用法:

$user = App\User::popular()->active()->orderBy('created_ar')->get();

三、全局scope

同樣在模型里面編寫,對(duì)當(dāng)前模型生效;

//全局scope
    protected static function boot(){
        parent::boot();
        static::addGlobalScope('avaiable',function(Builder $builder){
            $builder->whereIn('status',[0,1]);
        });
    }

四、如何取消全局scope

有的地方我們用不到這全局scope,需要排除在外
帶上withoutGlobalScope即可

Article::withoutGlobalScope('avaiable')->where('status', 0)->orderBy('created_at','desc')->paginate(10);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,981評(píng)論 19 139
  • AngularJS是什么?AngularJs(后面就簡(jiǎn)稱ng了)是一個(gè)用于設(shè)計(jì)動(dòng)態(tài)web應(yīng)用的結(jié)構(gòu)框架。首先,它是...
    200813閱讀 1,653評(píng)論 0 3
  • 通過AngularJS仿豆瓣一刻的案例:https://github.com/zhongxiaolian/doub...
    中小戀閱讀 1,787評(píng)論 1 21
  • 在健身中心經(jīng)常會(huì)看到健身人士用泡沫軸或按摩滾棒對(duì)肌肉進(jìn)行施壓按摩。這是一種行之有效的放松筋膜的方法,被稱作自我筋膜...
    金剛楊閱讀 8,466評(píng)論 0 8
  • 大樹小草鮮花, 蜻蜓蝴蝶蜜蜂, 金魚蝌蚪青蛙, 歡歌笑語,真是熱鬧絕佳!
    弈寶閱讀 992評(píng)論 0 2