就可以进行下面的条件查询:

    1. User::scope('thinkphp')->find();
    2. // 查找年龄大于20的10个用户
    3. User::scope('age')->select();
    4. // 查找name为thinkphp的用户并且年龄大于20的10个用户
    5. User::scope('thinkphp,age')->select();

    可以直接使用闭包函数进行查询,例如:

    1. User::scope(function($query){
    2. $query->where('age','>',20)->limit(10);
    3. })->select();

    支持动态调用的方式,例如:

    1. $user = new User;
    2. // 查找年龄大于20的10个用户
    3. $user->age()->all();
    4. // 查找name为thinkphp的用户并且年龄大于20的10个用户
    5. $user->thinkphp()->age()->all();

    如果你的所有查询都需要一个基础的查询范围,那么可以在模型类里面定义一个静态的base方法,例如:

    1. namespace app\index\model;
    2. use think\Model;
    3. class User extends Model
    4. // 定义全局的查询范围
    5. protected function base($query)
    6. {
    7. $query->where('status',1);
    8. }
    9. }

    最终的查询条件会是

    1. status = 1 AND id = 1

    如果需要动态关闭/开启全局查询访问,可以使用:

    1. // 关闭全局查询范围
    2. User::useGlobalScope(false)->get(1);