当前位置:

首页 > 编程开发 > Laravel如何设置全局作用域查询_Laravel设置全局作用域查询方法【ORM】

Laravel如何设置全局作用域查询_Laravel设置全局作用域查询方法【ORM】

Lara vel全局作用域:为模型查询自动穿上“统一制服” 在Lara vel应用开发中,你是否遇到过这样的场景:几乎每次查询某个模型时,都需要重复添加相同的条件?比如,只想查询状态为“启用”的用户,或者必须根据当前租户ID自动过滤数据。如果每个查询都手动加上where('status', 1),不

本文目录

    Lara vel全局作用域:为模型查询自动穿上“统一制服”

    Lara vel如何设置全局作用域查询_Lara vel设置全局作用域查询方法【ORM】

    在Lara vel应用开发中,你是否遇到过这样的场景:几乎每次查询某个模型时,都需要重复添加相同的条件?比如,只想查询状态为“启用”的用户,或者必须根据当前租户ID自动过滤数据。如果每个查询都手动加上where('status', 1),不仅代码冗余,更容易因遗漏而出错。

    这时,全局作用域(Global Scope)就该登场了。它的核心作用,就是为模型的所有查询自动、统一地“穿上”预设的条件“制服”,确保数据访问的一致性。下面,我们就来详细拆解它的几种实现方式。

    一、使用闭包定义全局作用域:轻量快捷的“匿名”方案

    对于逻辑简单、无需复用的条件,闭包方式是最直接的选择。它省去了创建独立类的步骤,直接在模型内部“一站式”搞定。

    具体操作很简单:在目标模型的boot方法中,调用addGlobalScope方法。这个方法接收一个闭包,闭包内可以拿到$builder(查询构造器)和$model(模型实例)两个参数。接下来,就是你的表演时间了——通过$builder->where(...)来添加任何你需要的固定条件。

    一个小建议:通常把这个注册逻辑放在boot方法的顶部,确保它在模型生命周期的早期就生效。

    二、定义独立的作用域类:可复用、易维护的“正规军”

    当你的过滤逻辑比较复杂,或者需要在多个模型之间共享时,闭包就显得力不从心了。这时,创建一个独立的作用域类才是更优雅、更符合设计原则的做法。

    首先,通过Artisan命令php artisan make:scope TenantScope来生成一个作用域类。这个类需要实现Illuminate\Database\Eloquent\Scope接口,并重写其apply方法。你的核心过滤逻辑,就写在这个apply方法里。

    最后,在需要应用的模型中,于boot方法内注册它:addGlobalScope(new TenantScope)。这样一来,清晰的分工、更好的可测试性就都实现了。

    三、使用本地作用域替代全局作用域:按需调用的“灵活选项”

    全局作用域是“强制生效”,但有时候,我们只希望条件在显式调用时才被应用。比如,一个“活跃用户”的查询条件,可能只在部分业务逻辑中使用,而不是每次查用户都要用。

    这时,就该本地作用域(Local Scope)上场了。它在模型里定义一个以scope开头的方法(例如scopeActive),方法内接收$query参数并添加条件。使用时,像这样调用:User::active()->get()。

    它给了开发者最大的灵活性,避免了全局作用域可能带来的“误伤”,特别适合那些非普适性的查询条件。

    四、排除已注册的全局作用域:如何“临时脱掉制服”

    全局作用域虽好,但总有例外。比如在后台管理界面,你可能需要查看所有数据(包括被软删除的);或者在执行数据迁移脚本时,需要绕过租户隔离。这就需要在特定查询中,临时排除某个全局作用域。

    方法很直接:使用withoutGlobalScope。对于类形式的作用域,传入类名即可:User::withoutGlobalScope(TenantScope::class)->get()。要排除多个?那就传一个数组进去。

    对于用闭包注册的作用域,排除时需要一点小技巧:注册时必须给它指定一个唯一的字符串键名(例如'active'),排除时同样使用这个键名:withoutGlobalScope('active')。

    五、禁用所有全局作用域:回归“原始查询”的终极手段

    在极少数需要“完全原始”数据的场景下,比如全库数据导出或某些底层同步任务,你可能希望暂时屏蔽所有全局作用域,包括Lara vel框架内置的(比如软删除作用域)。

    这个“大招”就是withoutGlobalScopes方法。静态调用它且不传任何参数,你将得到一个“纯净版”的查询构造器,之后的所有链式操作都不会受到任何全局作用域的干扰。

    不过,务必慎用此功能。因为它真的会禁用一切,包括那些你可能依赖的核心功能。调用前,请务必确认你的业务逻辑能够处理“赤裸裸”的原始数据。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    酷云eye怎么看地方台收视率?各省卫视数据查询方法
    酷云eye怎么看地方台收视率?各省卫视数据查询方法

    查询地方台收视率需先确认频道被酷云覆盖,官网可查接入状态;App中查省级卫视可用榜单或筛选,地市台需输入全称且覆盖终端数≥5万,才能调取实时曲线与对比分析。

    Windy气象怎么看PM2.5?空气质量指数查询方法
    Windy气象怎么看PM2.5?空气质量指数查询方法

    在WindyApp中,从主界面右下角菜单进入空气质量图层,可快速获取PM2.5浓度与AQI数值。支持定位自动获取或手动搜索城市,还能切换海拔高度观察污染物垂直分布,直观反映近地面污染状况。

    搜狗五笔编码查询方法
    搜狗五笔编码查询方法

    搜狗五笔输入法遇到生僻字时,点击工具条上的工具箱进入词典,输入字词后点击查找,即可显示对应五笔编码。无需切换输入模式,操作简便快捷,适合查询不常用汉字的编码,提升输入效率。

    工伤保险缴纳时长查询方法
    工伤保险缴纳时长查询方法

    在支付宝市民中心进入社保,选择电子社保卡,点击查询服务中的参保缴费记录明细,再选工伤保险,即可查看个人工伤保险的缴纳时长详情,包括缴费起止时间及累计月数。

    工伤保险查询方法指南
    工伤保险查询方法指南

    在支付宝App内,进入市民中心,点击办事大厅,找到工伤保险查询功能,即可查看缴费记录、待遇发放等详细信息。操作简单明了,按步骤指引即可快速完成查询,方便职工随时掌握自身权益。

    京东超市卡有效期查询方法
    京东超市卡有效期查询方法

    想知道京东超市卡还剩多少有效期?操作非常简单,跟着下面几步走就行。 1、 打开京东App,进入首页后,直接点击“京东超市”图标。 2、 进入京东超市主页,往下拉一点,找到并点击下方的“福利”按钮。 3、 进入福利页面后,注意右上角有一个“明细”按钮,点击它。 4、 登录账户明细页面,这里就能清晰看到

    天猫超市卡有效期查询方法
    天猫超市卡有效期查询方法

    很多人都会遇到一个问题:手里攒的天猫超市卡,到底什么时候到期?别担心,其实查询起来很简单。下面就用最直观的图文方式,把整个操作流程拆解清楚,保证你看完就会。 1. 先在手机桌面上找到淘宝图标,点一下,把应用打开。 2. 进入淘宝首页后,找到“天猫超市”的入口,直接点进去。 3. 到了天猫超市界面,注

    山西民生认证app怎么查养老金余额  民生山西养老金余额查询方法
    山西民生认证app怎么查养老金余额 民生山西养老金余额查询方法

    通过“民生山西”App可查询养老金余额:下载登录后进入“社保查询”,找到“养老金查询”可查看待遇调整记录、每月发放记录及年度对账单。注册时需准确填写参保地区,否则数据可能不匹配。

    怎么查看Gmarket物流信息-Gmarket韩国直邮包裹实时查询方法
    怎么查看Gmarket物流信息-Gmarket韩国直邮包裹实时查询方法

    在Gmarket海淘,最让人牵肠挂肚的莫过于包裹的物流状态了。尤其是那些从韩国直邮过来的宝贝,实时掌握它的行踪,心里才踏实。别急,下面就来拆解一下,怎么一步步追踪你的Gmarket韩国直邮包裹。 订单页面查看 当你完成购物并确认订单后,第一个“情报站”就在订单详情页里。通常,页面会有一个“配送信息”

    格子达论文管理系统导师审核怎么看?审核状态查询方法
    格子达论文管理系统导师审核怎么看?审核状态查询方法

    你想在格子达系统里快速确认自己指导的学生论文是否已提交、待你审批,或者已经通过/被退回,又怕漏看某条审批消息导致学生流程卡住——这确实关系到学生能否按时进入答辩环节。登录后第一时间查看待审批项打开浏览器,访问 http://co.gocheck.cn/13924 → 输入工号和初始密码 Hb1234

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。