💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
知识点: 1、链式介绍 2、类库申明 3、类库调用 4、参考网址 [TOC] 本文对理解数据库链式操作有帮助,特此说明。 ## 一、链式介绍 数据库提供的链式操作方法,可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作。 使用也比较简单,假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下: ~~~ Db::table('think_user') ->where('status',1) ->order('create_time') ->limit(10) ->select(); ~~~ 这里的where()、order()和limit()方法就被称之为链式操作方法,除了select方法必须放到最后一个外(因为select方法并不是链式操作方法),链式操作的方法调用顺序没有先后,例如,下面的代码和上面的等效: ~~~ Db::table('think_user') ->order('create_time') ->limit(10) ->where('status',1) ->select(); ~~~ 其实不仅仅是查询方法可以使用连贯操作,包括所有的CURD方法都可以使用,例如: ~~~ Db::table('think_user') ->where('id',1) ->field('id,name,email') ->find(); Db::table('think_user') ->where('status',1) ->where('id',1) ->delete(); ~~~ 链式操作在完成查询后会自动清空链式操作的所有传值。简而言之,链式操作的结果不会带入后面的其它查询。 ## 二、类库申明 ### 1、类库位置 \extend\Util\data\Sysdb.php ### 2、申明代码 ~~~ <?php namespace Util\data; use think\Db; class Sysdb{ // 指定表名 public function table($table){ $this->where = array(); $this->field = '*'; $this->order = ''; $this->table = $table; return $this; } // 指定查询字段 public function field($field = '*'){ $this->field = $field; return $this; } // 排序 public function order($order){ $this->order = $order; return $this; } // 指定查询条件 public function where($where = array()){ $this->where = $where; return $this; } // 返回一条记录 public function item(){ $item = Db::name($this->table)->field($this->field)->where($this->where)->find(); return $item ? $item : false; } // 返回list public function lists(){ $query = Db::name($this->table)->field($this->field)->where($this->where); $this->order && $query = $query->order($this->order); $lists = $query->select(); return $lists ? $lists : false; } // 自定义索引列表 public function cates($index){ $query = Db::name($this->table)->field($this->field)->where($this->where); $this->order && $query = $query->order($this->order); $lists = $query->select(); if(!$lists){ return false; } $results = []; foreach ($lists as $key => $value) { $results[$value[$index]] = $value; } return $results; } // 分页 public function pages($pageSize = 10){ $total = Db::name($this->table)->where($this->where)->count(); $query = Db::name($this->table)->field($this->field)->where($this->where); $this->order && $query = $query->order($this->order); $data = $query->paginate($pageSize,$total); return array('total'=>$total,'lists'=>$data->items(),'pages'=>$data->render()); } // 添加 public function insert($data){ $res = Db::name($this->table)->insert($data); return $res; } // 修改 public function update($data){ $res = Db::name($this->table)->where($this->where)->update($data); return $res; } // 删除 public function delete(){ $res = Db::name($this->table)->where($this->where)->delete(); return $res; } } ~~~ ## 三、类库调用 ### 1、类库引入 ~~~ <?php namespace app\admins\controller; use think\Controller; use Util\data\Sysdb; class BaseAdmin extends Controller { ....... } ?> ~~~ ### 2、创建对象 ~~~ $this->db = new Sysdb; ~~~ ### 3、链式调用 ~~~ $admin = $this->db->table('admins')->where(array('username'=>$username))->item(); ~~~ ### 4、完整代码 ~~~ <?php namespace app\admins\controller; use think\Controller; use Util\data\Sysdb; /** * */ class Account extends Controller { public function login(){ return $this->fetch(); } // 管理员登录 public function dologin(){ $username = trim(input('post.username')); $pwd = trim(input('post.pwd')); $verifycode = trim(input('post.verifycode')); if($username == ''){ exit(json_encode(array('code'=>1,'msg'=>'用户名不能为空'))); } if($pwd == ''){ exit(json_encode(array('code'=>1,'msg'=>'密码不能为空'))); } if($verifycode == ''){ exit(json_encode(array('code'=>1,'msg'=>'请输入验证码'))); } // 验证验证码 if(!captcha_check($verifycode)){ exit(json_encode(array('code'=>1,'msg'=>'验证码错误'))); } // 验证用户 $this->db = new Sysdb; $admin = $this->db->table('admins')->where(array('username'=>$username))->item(); if(!$admin){ exit(json_encode(array('code'=>1,'msg'=>'用户不存在'))); } if(md5($admin['username'].$pwd) != $admin['password']){ exit(json_encode(array('code'=>1,'msg'=>'密码错误'))); } if($admin['status'] == 1){ exit(json_encode(array('code'=>1,'msg'=>'用户已被禁用'))); } // 设置用户session session('admin',$admin); exit(json_encode(array('code'=>0,'msg'=>'登录成功'))); } public function logout(){ session('admin',null); exit(json_encode(array('code'=>0,'msg'=>'退出成功'))); } } ~~~ ## 四、参考网址 1、链式操作 https://www.kancloud.cn/manual/thinkphp5/135180 2、天龙八部之实战爱奇艺/ThinkPHP5/PHP实战 https://ke.qq.com/course/305634#undefined=1