laravel 盘问作用域
laravel中的盘问作用域是一种很是主要的功效,它可以让你在模子中界说一些常用的盘问要领,以便在整个应用中举行复用。这些盘问作用域可以是全局的(适用于整个模子),也可以是局部的(只适用于该模子的某个要领中)。
在本文中,我们将先容 Laravel 中的盘问作用域的界说、使用以及一些应该注重的事项。
盘问作用域的界说
盘问作用域是一个匿名函数,它吸收一个 $query 参数,该参数是一个 Eloquent 盘问构建器实例。在这个匿名函数中,你可以对该实例举行一些盘问操作,例如添加 where 子句、order by 子句等。
以下是一个基本的盘问作用域界说示例:
public function scopePublished($query) { return $query->where('status', '=', 'published'); }
登录后复制
在上面的示例中,我们界说了一个名为 published 的盘问作用域,它会在盘问时自动添加一个 where 子句来过滤已宣布的模子。
使用盘问作用域
使用盘问作用域很是简朴,只需要挪用模子的响应要领即可。例如,若是我们使用上面示例中的 published 盘问作用域,只需要挪用如下代码:
$posts = Post::published()->get();
登录后复制
上述代码将返回一个已宣布的所有 Post 实例荟萃。
若是你需要转达参数到盘问作用域中,则只需在该要领中添加参数即可。例如:
public function scopeCategory($query, $categoryId) { return $query->where('category_id', '=', $categoryId); }
登录后复制
该盘问作用域可用于过滤某个特定类别的博客文章。
$posts = Post::category(1)->get();
登录后复制
上述代码将返回种别 ID 为 1 的所有博客文章。
注重:盘问作用域可以链式挪用,以是你可以同时使用多个盘问作用域以获取更准确的效果。
盘问作用域的全局界说
若是你想在整个模子中使用相同的盘问作用域,则可以界说全局盘问作用域。为此,只需在模子中挪用 boot 要领,并使用 static::addGlobalScope 要领界说一个全局盘问作用域即可。
以下是一个基本的全局盘问作用域示例:
protected static function boot() { parent::boot(); static::addGlobalScope('active', function (Builder $builder) { $builder->where('active', '=', 1); }); }
登录后复制
上面的示例中,我们界说了一个名为 active 的全局盘问作用域,并将其限制为 active 字段即是 1 的纪录。
现在,当你在任何要领中盘问该模子时,该盘问作用域都会自动生效。
移除盘问作用域
有时间我们可能需要移除特定模子的盘问作用域。Laravel 提供了 removeGlobalScope 要领来资助我们实现这一点。
例如,假设我们有一个名为 active 的全局盘问作用域,我们可以使用以下要领来移除它:
$users = User::withoutGlobalScope('active')->get();
登录后复制
上述代码将返回不受 active 作用域限制的所有用户。
注重:若是您想移除所有全局盘问作用域,则可以使用 withoutGlobalScopes 要领。
$users = User::withoutGlobalScopes()->get();
登录后复制
上述代码将返回不受任何全局盘问作用域限制的所有用户。
总结
盘问作用域是 Laravel 中一个极为强盛的功效。通过使用盘问作用域,你可以利便地在整个应用中重用常用的盘问操作,并越发清晰地组织代码。学习好盘问作用域的准确使用要领不但可以提高你的生产力,也可以资助你构建越发结实的应用。
以上就是laravel 盘问作用域的详细内容,更多请关注本网内其它相关文章!