GA黄金甲

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 盘问作用域的详细内容,更多请关注本网内其它相关文章!

免责说明:以上展示内容泉源于相助媒体、企业机构、网友提供或网络网络整理,版权争议与本站无关,文章涉及看法与看法不代表GA黄金甲滤油机网官方态度,请读者仅做参考。本文接待转载,转载请说明来由。若您以为本文侵占了您的版权信息,或您发明该内容有任何涉及有违公德、冒犯执法等违法信息,请您连忙联系GA黄金甲实时修正或删除。

相关新闻

联系GA黄金甲

18523999891

可微信在线咨询

事情时间:周一至周五,9:30-18:30,节沐日休息

QR code
【网站地图】【sitemap】