thinkphp查询作用域(scope)如何简化查询

答案:Thinkphp的查询作用域通过定义scope方法封装常用查询条件,支持无参、带参及默认全局作用域,可组合调用或链式使用,有效减少重复代码,提升模型可维护性。

thinkphp查询作用域(scope)如何简化查询

thinkphp 的查询作用域(scope)是一种封装常用查询条件的方式,能有效减少重复代码,提升模型的可维护性。通过定义作用域,你可以把经常用到的查询逻辑集中管理,在需要时直接调用。

1. 定义查询作用域

在模型类中通过 scope 开头的方法定义作用域。方法接收查询对象作为参数,可链式调用。

例如,用户模型中常见的“只查启用状态”和“按创建时间排序”:

 class User extends Model {     // 定义作用域:启用状态     public function scopeActive($query)     {         $query->where('status', 1);     }      // 定义作用域:按创建时间倒序     public function scopeLatest($query)     {         $query->order('create_time', 'DESC');     } } 

2. 使用作用域简化查询

定义后,可通过 使用 scope 方法调用多个作用域,组合出完整查询。

立即学习PHP免费学习笔记(深入)”;

 // 调用多个作用域 User::scope('active,latest')->select();  // 等同于 User::where('status', 1)->order('create_time', 'DESC')->select(); 

也可以直接链式调用作用域方法(需开启动态调用):

 User::active()->latest()->select(); 

3. 带参数的作用域

作用域支持传参,适用于动态条件。

thinkphp查询作用域(scope)如何简化查询

蓝心千询

蓝心千询是vivo推出的一个多功能AI智能助手

thinkphp查询作用域(scope)如何简化查询34

查看详情 thinkphp查询作用域(scope)如何简化查询

 public function scopeType($query, $type) {     $query->where('type', $type); }  public function scopeKeyword($query, $keyword) {     $query->where('name', 'like', "%{$keyword}%"); } 

调用方式:

 User::scope('type:1,keyword:张')->select(); // 或 User::type(1)->keyword('张')->select(); 

4. 默认作用域(全局作用域)

如果希望某个条件每次查询都自动加上,可定义默认作用域。

 public static function base($query) {     $query->where('is_delete', 0); // 假设软删除字段 } 

这样,所有对该模型的查询都会自动过滤掉已删除数据。

基本上就这些。合理使用作用域能让代码更清晰,避免到处写重复的 where 条件,尤其适合权限、状态、租户等通用筛选场景。

以上就是

    当前页面评论已关闭。

    text=ZqhQzanResources