模型中的查询范围,主要用于对模型中的查询和写入操作进行封装
目的是为了让方法类调用某些常用字段或结果的时候,能够快速的调用,而不用每一次都写一条sql语句
//设置命名空间namespace app/admin/model;use think/Model;定义model类(在Model类中写入)Class User extends Model{protected function scopeThinkphp($query){$query->where('name','thinkphp')->field('id','name');//$query实参实际上等于new了一个User对象//对象调用查询条件为name为thinkphp的值,在指定字段id,name中查询}//又或者查询指定区间,查询范围命名方式为驼峰式命名protected function scopeAge($query){$query->where('age','>',20)->limit(10);//查询10条age大于10的数}}
当我们进行了查询范围的设置之后,我们就可以在控制器类中进行调用,比如:
User::spoce('thinkphp')->find();User::spoce('age')->select();//下述方式可支持多个范围条件,以下为查询结果出名字为thinkphp,年龄大于20的结果User::sopce('thinkphp','age')->select();
同样支持传递参数,参数1为整个对象,参数2为附带条件
namespace app\index\model;use think\Model;class User extends Model{protected function scopeAgeAbove($query, $lowest_age){$query->where('age','>',$lowest_age)->limit(10);}}//在控制器中将范围和附加条件传进去User::scope('ageAbove', 20)->select();
并且支持动态调用的方式,比如上面的名称为Thinkphp的,可以动态调为:
$user = new User;// 查找name为thinkphp的用户$user->thinkphp()->get();// 查找年龄大于20的10个用户$user->age()->all();// 查找name为thinkphp的用户并且年龄大于20的10个用户$user->thinkphp()->age()->all();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号