如何设置Laravel模型作用域实现全局与局部查询范围?

2026-04-28 23:001阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计983个文字,预计阅读时间需要4分钟。

如何设置Laravel模型作用域实现全局与局部查询范围?

模型以下内容为模型生成的结果,直接输出,不包含图片解释,不涉及数字,不超过100字。

全局作用域必须注册到 boot 方法里才生效

很多人把全局作用域类写好了,却在模型里漏掉 static::addGlobalScope() 调用,结果查出来的数据完全没受限制。

  • 必须在模型的 boot 静态方法中注册,不能放在构造函数或其它任意位置
  • 注册顺序影响最终 SQL:后注册的作用域会包裹在先注册的外层(类似中间件洋葱模型)
  • 如果用了软删除(SoftDeletes),Laravel 自动加了 where deleted_at is null,你的全局作用域会套在这个条件外面,可能意外屏蔽掉本该查到的数据

class User extends Model { protected static function boot() { parent::boot(); static::addGlobalScope(new ActiveUserScope()); // ✅ 正确位置 } }

局部作用域命名要带 scope 前缀,且只能用静态方法

不加 scope 前缀,Eloquent 就不认识这是作用域;写成实例方法(public function),调用时直接报错 Call to undefined method

阅读全文

本文共计983个文字,预计阅读时间需要4分钟。

如何设置Laravel模型作用域实现全局与局部查询范围?

模型以下内容为模型生成的结果,直接输出,不包含图片解释,不涉及数字,不超过100字。

全局作用域必须注册到 boot 方法里才生效

很多人把全局作用域类写好了,却在模型里漏掉 static::addGlobalScope() 调用,结果查出来的数据完全没受限制。

  • 必须在模型的 boot 静态方法中注册,不能放在构造函数或其它任意位置
  • 注册顺序影响最终 SQL:后注册的作用域会包裹在先注册的外层(类似中间件洋葱模型)
  • 如果用了软删除(SoftDeletes),Laravel 自动加了 where deleted_at is null,你的全局作用域会套在这个条件外面,可能意外屏蔽掉本该查到的数据

class User extends Model { protected static function boot() { parent::boot(); static::addGlobalScope(new ActiveUserScope()); // ✅ 正确位置 } }

局部作用域命名要带 scope 前缀,且只能用静态方法

不加 scope 前缀,Eloquent 就不认识这是作用域;写成实例方法(public function),调用时直接报错 Call to undefined method

阅读全文