深入解析_
手游辅助 2026-09-03 10:29:53
0
正文:
在Laravel开发中,深入解析我们经常遇到需要全局过滤数据的深入解析场景,比如多租户系统的深入解析租户隔离 、软删除数据的深入解析自动躲避 ,或是深入解析业务状态的条件筛选。这时候,深入解析全局作用域(Global Scopes)就像一把瑞士军刀 ,深入解析能优雅地统一筹备这些需求 ,深入解析避免在每个查询中重复编写相同逻辑 。深入解析
一、深入解析什么是深入解析全局作用域?全局作用域是Laravel Eloquent提供的一种机制 ,允许开发者强制为所有模型查询增补约束条件。深入解析与局部作用域不同,深入解析它不需要手动调用,深入解析而是深入解析自动生效 ,类似一个“隐形的WHERE子句” 。
二 、经典应用场景 软删除数据过滤:自动排除deleted_at不为空的记录 多租户隔离 :强制增补tenant_id = current_tenant条件 状态控制:只返回status = published的活跃数据 三 、实现全局作用域的两种方式1. 闭包方式(快速实现)适用于简易逻辑 ,直接在模型booted计划中定义:
protected static function booted() { static::addGlobalScope(active, function (Builder $builder) { $builder->where(status, active); }); }2. 类方式(推荐繁杂场景)创建独立的Scope类,实现apply计划:
namespace App\Models\Scopes; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Scope; class TenantScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where(tenant_id, auth()->user()->tenant_id); } }在模型中注册 :
protected static function booted() { static::addGlobalScope(new TenantScope()); }四 、高级技巧与注意事项 动态禁用作用域: User::withoutGlobalScope(TenantScope::class)->get(); 组合多个作用域