下面是一个示例数据库表(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