博客列表 >thinkphp5:模型中的查询范围

thinkphp5:模型中的查询范围

梁凯达的博客
梁凯达的博客原创
2020年06月07日 00:47:291487浏览

模型中的查询范围,主要用于对模型中的查询和写入操作进行封装
目的是为了让方法类调用某些常用字段或结果的时候,能够快速的调用,而不用每一次都写一条sql语句

  1. //设置命名空间
  2. namespace app/admin/model;
  3. use think/Model;
  4. 定义model类(在Model类中写入)
  5. Class User extends Model{
  6. protected function scopeThinkphp($query){
  7. $query->where('name','thinkphp')->field('id','name');
  8. //$query实参实际上等于new了一个User对象
  9. //对象调用查询条件为name为thinkphp的值,在指定字段id,name中查询
  10. }
  11. //又或者查询指定区间,查询范围命名方式为驼峰式命名
  12. protected function scopeAge($query){
  13. $query->where('age','>',20)->limit(10);
  14. //查询10条age大于10的数
  15. }
  16. }

当我们进行了查询范围的设置之后,我们就可以在控制器类中进行调用,比如:

  1. User::spoce('thinkphp')->find();
  2. User::spoce('age')->select();
  3. //下述方式可支持多个范围条件,以下为查询结果出名字为thinkphp,年龄大于20的结果
  4. User::sopce('thinkphp','age')->select();

同样支持传递参数,参数1为整个对象,参数2为附带条件

  1. namespace app\index\model;
  2. use think\Model;
  3. class User extends Model
  4. {
  5. protected function scopeAgeAbove($query, $lowest_age)
  6. {
  7. $query->where('age','>',$lowest_age)->limit(10);
  8. }
  9. }
  10. //在控制器中将范围和附加条件传进去
  11. User::scope('ageAbove', 20)->select();

并且支持动态调用的方式,比如上面的名称为Thinkphp的,可以动态调为:

  1. $user = new User;
  2. // 查找name为thinkphp的用户
  3. $user->thinkphp()->get();
  4. // 查找年龄大于20的10个用户
  5. $user->age()->all();
  6. // 查找name为thinkphp的用户并且年龄大于20的10个用户
  7. $user->thinkphp()->age()->all();
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议