亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

避免特定查詢上的 laravel 全局作用域

避免特定查詢上的 laravel 全局作用域

PHP
不負相思意 2023-11-03 15:15:18
我有一個stuents包含 3 列的表格graduated,leaver并且deleted_at。畢業和離開者都是 int (1),默認值為 null。當學生畢業或離開學校時,相應的欄位變為1。當我使用$students=Student::get();我只需要返回 Student(其中graduated和leaver為 null),因此我創建了兩個全局范圍:protected static function boot(){    parent::boot();     static::addGlobalScope('onlyGraduated', function ($builder) {        $builder->where('graduated', null);    });    static::addGlobalScope('onlyLeaver', function ($builder) {        $builder->where('leaver', null);    }); }這適用于大多數用例,但是當我希望學生畢業時,我應該對某些特定查詢做什么?例如Students::where("graduated",1)->get();
查看完整描述

1 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

如果您需要避免特定查詢中的全局范圍,則 yuu 應使用withoutGlobalScope:


Students::withoutGlobalScope('onlyGraduated')->where("graduated",1)->get();

我將在您的模型中創建一個名為graduated和 的本地范圍leaver:


public function scopeGraduated($query) {

  return $query->withoutGlobalScope('onlyGraduated')->where("graduated",1);

}


public function scopeLeavers($query) {

  return $query->withoutGlobalScope('onlyLeaver')->where("leaver",1);

}

然后您將能夠使用以下方式查詢數據:


Students::get(); // Only students with both graduated and leaver null

Students::graduated()->get(); // Students with leaver null and graduated 1

Students::leavers()->get(); // Students with leaver 1 and graduated null


查看完整回答
反對 回復 2023-11-03
  • 1 回答
  • 0 關注
  • 167 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號