全局作用域是Laravel中为模型所有查询自动添加约束的机制,如状态过滤或多租户隔离;通过实现Scope接口或使用闭包定义,可在模型的boot方法中注册,例如ActiveScope限制仅查询激活用户;系统自带软删除即基于此机制,默认添加deleted_at为null条件;可通过withoutGlobalScope移除指定或全部作用域以查询完整数据。

在 Laravel 的 Eloquent ORM 中,全局作用域(Global Scopes)是一种为模型的所有查询自动添加约束条件的机制。它让你无需每次手动写 where 条件,就能实现诸如“软删除”、“多租户数据隔离”或“状态过滤”等功能。
什么是全局作用域
全局作用域会作用于该模型的每一个查询操作,包括关系查询、静态调用以及链式调用。比如你有一个 User 模型,默认只希望获取状态为“激活”的用户,就可以通过全局作用域统一处理。
Laravel 自带的软删除功能就是基于全局作用域实现的 —— 它自动在所有查询中加入 where null deleted_at 条件。
如何定义和使用全局作用域
创建全局作用域有多种方式,最常见的是使用作用域类或匿名全局作用域。
1. 使用作用域类(推荐)首先创建一个实现 Illuminate\Database\Eloquent\Scope 接口的类:
php artisan make:scope ActiveScope
登录后复制
然后编辑生成的类:
<?php
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');
}
}
登录后复制
接着在模型中注册这个全局作用域:
标签: 全局作用域 laravel php app 工具 ai 作用域
还木有评论哦,快来抢沙发吧~