知识点:
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
- Layer无刷新不跳转弹框提示信息
- 整合ThinkPHP+实用代码
- TP整合Layer插件实现无刷新
- 自定义助手函数
- 添加信息失败后不跳转
- 三种无限级分类
- TP常用代码
- 自定义公共函数
- TP模型管理专题
- TP模型管理之添加模型
- sfox_newmodel.sql
- TP模型管理之删除模型
- TP模型管理之编辑模型
- TP模型管理之字段添加
- sfox_newmodel.sql_edit
- layer_hplus.js_edit
- TP模型管理之字段删除
- TP模型管理之字段编辑
- TP模型管理之预览模型
- TP模型管理之公共函数
- layer_hplus.js_修订一
- TP模型管理之预览模型静态页
- 后台内容管理系统
- 分类树显示
- 内容列表显示
- 信息发布
- 编辑信息
- layer_hplus.js
- myJs第一版
- myJs第二版
- myJs第三版
- myJs第四版
- TP5插件用法
- Datatables
- WebUploader
- bootstrap-fileinput
- UEditor
- 简单调用
- 路径问题
- 跨域多图上传
- 跨域单图上传
- UEditor图片跨域上传解决方案
- 定制工具栏图标
- ajaxFileUpload
- LayUI
- 图片上传
- layui分页
- 搜索页
- 搜索优化及删除
- Uploadify
- TP5前端应用
- 静态首页
- 前台首页功能实现
- 自定义标签库
- 前台模板继承应用
- 首页自定义标签改进
- 文章内容页
- 自定义标签改进
- 自定义标签修正
- 图片等比例自动缩放
- 后台权限管理
- 角色管理
- 规则管理
- 权限设置
- 会员管理
- 权限管理
- 前台登录注册功能
- 注册登录
- 阿里大于手机注册
- 阿里大于升级阿里云短信服务
- 自动登录完成
- PHP异位或加密实现自动登陆
- 微信开发
- 分享接口
- 静态页面实现微信分享
- 动态页微信分享
- 页面静态化
- 1-全站静态化前期配置
- 2-链接地址静态化
- TP5常用片段代码
- 加载静态资源路径与常量
- thinkphp5预定义常量
- 删除某文件夹的内容
- 解压插件包
- 异步提交插件
- 其他功能
- 背景音乐
- 手机访问PC网站自动跳转到手机网站代码
- 手机微信音乐MP3播放器
- 后盾之网页背景音乐
- 播放器宽度自适应
- 前台首页数据调用
- 视频列表
- 搜索分页
- H5解决苹果(IOS)不能自动播放音乐
- 清空缓存
- 文件处理常识
- 删除路径下的所有文件夹和文件
- 一键清空缓存
- 评论留言
- 格式化时间
- 替换微博内容的URL地址@用户与表情
- PHP正则理解
- jQuery评论插件
- TP空操作
- TP路由
- 跨域访问
- 设置请其头允许跨域请求
- 模板前台判断手机访问跳转手机网址代码
- PHP遍历一个文件夹下所有文件和子文件夹
- PHP获取视频的第一帧与时长
- TP5数据库
- 链式操作原理
- update替换字段部分内容
- 后台开发
- 后台登录页居中显示
- TP5自带验证码
- JS & JQuery专题
- 二级城市联动菜单
- 模板引擎
- 混合模板编译
- 黄永成TP微博开发
- 消息推送
- memcache安装
- 插件开发
- 插件介绍
- 插件钩子
- 浅谈初步理解钩子
- 插件钩子(hooks)分析
- 插件钩子简单理解
- 控制器调用插件
- 钩子通用处理函数
- 插件基类代码
- 插件测试代码
- 浅谈钩子与插件
- 技术综合
- 常用代码
- PHP
- 56个PHP开发常用代码片段(上)
- 56个PHP 开发常用代码片段(中)
- 56个PHP 开发常用代码片段(下)
- sublime text安装自动补全注释的插件
- 影音视频开发
- 视频
- H5视频直播扫盲
- 音乐
- 语音
- PHP实现语音播报功能
- MUI
- 窗体操作