新闻中心

Lar*el如何实现模型的全局作用域?(Global Scope示例)

2025-12-13
浏览次数:
返回列表
全局作用域用于为模型所有查询自动添加约束条件,如状态过滤;需实现Scope接口并重写apply方法,在模型boot中用addGlobalScope注册,可用withoutGlobalScopes等方法临时取消。

laravel如何实现模型的全局作用域?(global scope示例)

在 Lar*el 中,全局作用域(Global Scope)用于为模型的所有查询自动添加约束条件,比如软删除、多租户隔离、状态过滤等。它比在每个查询中手动加 where 更安全、更统一。

定义全局作用域类

创建一个实现 Illuminate\Database\Eloquent\Scope 接口的类,重写 apply() 方法,在这里编写你要注入的查询逻辑:

namespace App\Scopes;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('status', 'active');
    }
}

在模型中注册全局作用域

在模型的 boot() 方法中调用 addGlobalScope() 注册作用域:

namespace App\Models;

use App\Scopes\ActiveScope;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new ActiveScope());
    }
}

此后所有对 Post 的查询(如 Post::all()Post::find(1))都会自动加上 WHERE status = 'active'

临时取消全局作用域

某些场景下需要绕过全局作用域,比如后台管理或数据迁移,可用以下方式:

拾贝 拾贝

一键同步微信读书所有笔记和划线,并在新标签页回顾

拾贝 186 查看详情 拾贝
  • Post::withoutGlobalScopes()->get():移除全部全局作用域
  • Post::withoutGlobalScope(ActiveScope::class)->get():仅移除指定作用域
  • Post::withTrashed()->get()(如果用了软删除):这是 Lar*el 内置的特例,本质也是全局作用域

匿名全局作用域(适合简单逻辑)

不想单独建类?可以直接传闭包:

protected static function boot()
{
    parent::boot();

    static::addGlobalScope('active', function (Builder $builder) {
        $builder->where('status', 'active');
    });
}

注意:用字符串名注册时,取消要用同名,例如 withoutGlobalScope('active')

基本上就这些。全局作用域不复杂但容易忽略——关键在统一性和可维护性,别滥用,也别漏掉清除场景。

以上就是Lar*el如何实现模型的全局作用域?(Global Scope示例)的详细内容,更多请关注其它相关文章!


# 你要  # 北京光电网站优化价格表  # 关键词swot排名  # 世纪百捷网站建设技巧  # 沈阳网站优化费用多少钱  # 淮北网站推广软件有哪些  # 各大网站优化软件  # 关键词排名公司实力乐云seo  # 优化网站的通知范文文案  # 黄埔区seo推荐  # 嵩县营销型网站建设  # 并在  # laravel  # 在这里  # 这是  # 移除  # 表单  # 重写  # 拾贝  # 如何实现  # 自定义  # 作用域  # app 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 批改网学生版PC登录 批改网官网登录系统入口  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证  文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】  动漫岛观看全网网 动漫岛在线正版动漫入口  必由学网页版入口 必由学官方平台直接访问  PHP URL参数传递与500错误调试指南  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程  高德地图怎么看全景照片_高德地图全景照片浏览教程  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  极兔快递快件信息查询系统 极兔快递官网运单号追踪  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  Pandas DataFrame 多条件优先级排序与排名  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  Lar*el DB::listen 事件中的查询执行时间单位解析  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  J*aScript DOM操作:高效清空列表元素的策略与实践  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  Mac怎么锁定备忘录_Mac备忘录加密设置教程  照顾宝贝2小游戏免费秒玩入口  解决Bootstrap卡片顶部边距导致背景图下移的问题  漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口  苹果手机如何防止被恶意App追踪  Django表单提交验证失败后保持字段值不刷新  AO3官方可用镜像 Archive of Our Own网页版最新入口  谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法  小米14应用无法联网原因分析_小米14网络权限修复  J*aScript类型检查_j*ascript代码规范  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  大麦的“候补”是什么意思 大麦候补购票规则【详解】  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  C++如何实现单例模式_C++设计模式之线程安全的单例写法  优化HTML表单样式:解决输入框焦点跳动与元素间距问题  押井守高度称赞《辐射4》:玩了八年都停不下来!  使用Python高效删除Word宏并转换DOCM为DOCX格式  俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问  fishbowl官网免费版 fishbowl养鱼网站入口  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  Kafka Streams中基于消息头条件过滤消息的实现指南  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  妖精动漫免费平台 妖精动漫官网资源观看网址 

搜索