模型中的查询范围,主要用于对模型中的查询和写入操作进行封装
目的是为了让方法类调用某些常用字段或结果的时候,能够快速的调用,而不用每一次都写一条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();