下面是一個示例數據庫表(users
):雄辯模型的默認範圍?
id - int(11) auto_increment
name - varchar(100)
banned - int(1)
列banned
是一個布爾值,它是0
(false
)由缺省值。如果用戶被禁止,則值爲1
。
我想排除禁止所有查詢的用戶默認。我可以創建一個query scope然後在任何地方使用。但是,我更喜歡簡單地在默認情況下進行檢查。
我也可以創建自己的newQuery
- 方法,像這樣:
// Inside User-model, which extends Eloquent
public function newQuery($excludeDeleted = true)
{
$builder = parent::newQuery($exludeDeleted);
$builder->where('banned', '=', '0');
return $builder;
}
但是,這樣一來我就無法關閉這種行爲。我可能想在我的私人管理面板中看到被禁用的用戶,但無法執行,因爲此限制將應用於通過Eloquent完成的任何查詢。
有關如何解決此問題的任何想法?
據我所知,覆蓋'newQuery()'確實是唯一的方法。我發現自己處於類似的情況,我考慮創建一個scopeBase(),這是一個個人約定(不是Laravel的!),並努力記住調用'Model :: base() - > get )'等,只要我需要訪問模型。這很不理想,但是可以省略'newQuery()'。我想他們倆都很糟糕。 JohnTaa的答案似乎可以幫助你。 – alexrussell
做了一些挖掘。你可以應用全局範圍[像這樣](https://github.com/laravel/framework/issues/3897#issuecomment-41351443)。我給出的例子是可重用的作用域;你可能不需要,因爲只有用戶可以被禁止。 – mpen