您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
thinkphp5学习笔记-查询范围
发布时间:2018-06-14 21:34:05编辑:雪饮阅读()
有一些经常要用到查询每次频繁组装sql就比较麻烦了,查询范围就是解决这个问题的.
单个查询范围的使用
模型中定义:
protected function scopePhone($query){
$query->where('phone_num',15829270113);
}
控制器中调用:
$list=sUser::scope('phone')->all();
p($list);
解析:
模型中定义的$query相当于控制器中的调用者,即模型的实例化对象。
单个查询范围的使用(带参数)
where的查询条件中字段对应的值也是可以带变量的
模型中定义:
protected function scopePhone($query,$phone){
$query->where('phone_num',$phone);
}
控制器中调用:
$list=sUser::scope('phone',15829270113)->all();
p($list);
多个查询范围的一起调用:
相当于多个查询条件and合并查询了
模型中定义:
protected function scopePhone($query){
$query->where('phone_num',15829270113);
}
protected function scopeSex($query){
$query->where('sex','女');
}
控制器中调用:
$list=sUser::scope('phone,sex')->all();
p($list);
多个查询范围一起调用(连缀与闭包)
模型中定义:和上面“多个查询范围的一起调用”一样
控制器中调用:
$list=sUser::scope('phone')
->scope('sex')
->scope(function ($query){
$query->order('id','desc');
})
->all();
p($list);
全局范围查询:
一般在用户中心的所有查询都是该用户自己的,所有他的所有查询都应该限制为该用户的id,这就是全局范围查询的使用场景
全局范围查询只需要在模型中定义,而控制器中就和上面的一样调用即可,系统会自动在上面调用的基础上再增加用户id的这个限制的。
模型中定义如:
protected static function base($query){
$query->where('id',2018);
}
关键字词:thinkphp5,查询范围