ThinkPHP5实用的数据库操作方法
1、update方法总结
/** * 设置记录的某个字段值 * 支持使用数据库字段和方法 * @access public * @param string|array $field 字段名 * @param mixed $value 字段值 * @return integer */ function setField($field, $value = ''){};
//设置某个字段的值,适用场景:适用于用户积分清零、余额清零等类似操作 Db::name('table')->where('id',1)->setField('field',0);
/** * 字段值(延迟)增长 * @access public * @param string $field 字段名 * @param integer $step 增长值 * @param integer $lazyTime 延时时间(s) * @return integer|true * @throws Exception */ public function setInc($field, $step = 1, $lazyTime = 0){};
//自增某个字段的值,参数2不传时默认为自增1,适用场景:适用于用户积分增加、余额增加等类似操作,需要延时更新则传入第三个参数(单位秒), Db::name('table')->where('id',1)->setInc('field',2);
/** * 字段值(延迟)减少 * @access public * @param string $field 字段名 * @param integer $step 减少值 * @param integer $lazyTime 延时时间(s) * @return integer|true * @throws Exception */ public function setDec($field, $step = 1, $lazyTime = 0){};
//自减某个字段的值,参数2不传时默认为自减1,适用场景:适用于用户积分扣除、余额扣除等类似操作,需要延时更新则传入第三个参数(单位秒), Db::name('table')->where('id',1)->setDec('field',2);
/** * 使用表达式设置数据 * @access public * @param mixed $value 表达式 * @return Expression */ public function raw($value){};
//自增或自减多个字段的值,raw方法内支持SQL函数,适用场景:适用于同时更新用户累计余额、当前余额等类似操作 Db::name('table')->where('id',1)->update([ 'total_remain' => Db::raw("total_remain+100"), 'remain' => Db::raw("remain+100"), ]);
2、select方法总结
/** * 得到某个字段的值 * @access public * @param string $field 字段名 * @param mixed $default 默认值 * @param bool $force 强制转为数字类型 * @return mixed */ public function value($field, $default = null, $force = false){}; //查询某个字段的值,参数1支持SQL函数,适用场景:适用于获取用户余额、积分、名称等类似操作 Db::name('table')->where('id',1)->value('field'); //参数1为SQL函数时,如下、相当于使用TP5聚合查询 Db::name('table')->where('id',1)->value('COUNT(*) as count')['count']; //统计符合查询条件数据的行数 Db::name('table')->where('id',1)->value('MAX(field) as max')['max']; //获取符合查询条件数据的最大值 Db::name('table')->where('id',1)->value('MIN(field) as min')['min']; //获取符合查询条件数据的最小值 Db::name('table')->where('id',1)->value('AVG(field) as avg')['avg']; //获取符合查询条件数据的平均值 Db::name('table')->where('id',1)->value('SUM(field) as sum')['sum']; //获取符合查询条件数据的总和值
/** * 得到某个列的数组 * @access public * @param string $field 字段名 多个字段用逗号分隔 * @param string $key 索引 * @return array */ public function column($field, $key = ''){}; //查询某一列的值,适用场景:适用于获取关联订单商品ID、用户所有店铺ID、获取班级所有学生姓名等类似操作 Db::name('table')->where('order_id',1)->column('field');
/** * COUNT查询 * @access public * @param string $field 字段名 * @return integer|string */ public function count($field = '*'){}; //统计符合查询条件数据的行数,适用场景:适用于获取用户未读消息数量等类似操作 Db::name('table')->where('status',1)->count();
/** * SUM查询 * @access public * @param string $field 字段名 * @return float|int */ public function sum($field){}; //获取符合查询条件数据的总和值,适用场景:适用于获取用户总支出、总收入金额等类似操作 Db::name('table')->where('pay_type',1)->sum();
/** * MIN查询 * @access public * @param string $field 字段名 * @param bool $force 强制转为数字类型 * @return mixed */ public function min($field, $force = true){}; //获取符合查询条件数据的最小值,适用场景:适用于获取积分排名最后的用户等类似操作 Db::name('table')->where('status',1)->min();
/** * MAX查询 * @access public * @param string $field 字段名 * @param bool $force 强制转为数字类型 * @return mixed */ public function max($field, $force = true){};
//获取符合查询条件数据的最大值,适用场景:适用于获取积分排名第一的用户等类似操作 Db::name('table')->where('status',1)->max();
/** * AVG查询 * @access public * @param string $field 字段名 * @return float|int */ public function avg($field){}; //获取符合查询条件数据的平均值,适用场景:适用于班级平均分等类似操作 Db::name('table')->where('status',1)->avg();
3、insert方法总结
$insert = [ ['order_id' => 1, 'goods_id' => 1, 'attr_id' => 1], ['order_id' => 1, 'goods_id' => 1, 'attr_id' => 1], ['order_id' => 1, 'goods_id' => 1, 'attr_id' => 1] ]; //插入多条数据,适用场景:适用于用户购买商品记录订单商品信息等类似操作 Db::name('table')->insertAll($insert); $insert = ['order_id' => 1, 'goods_id' => 1, 'attr_id' => 1]; //插入一条数据并返回自增列值,适用场景:适用于用户购买商品生成订单后记录订单关联信息时获取生成订单的自增ID等类似操作 Db::name('table')->insertGetId($insert);
4、链式查询
//往分页查询的结果集内添加数据,适用于需要使用关联表查询到的数据再做另外的查询并存入数据集 $model->where('o.status<>6')->order('id desc')->paginate()->each( function ( $item ){ $service_ids = Db::name('order_service')->where('order_id',$item['id'])->column('service_id'); $service_names = Db::name('service')->where('id','in',$service_ids)->column('name'); $item['service_names'] = implode(',',$service_names); return $item; } );
//获取分页查询结果集内的全部数据,适用于需要使用分页数据内的某些数据再做另外的查询 $list = $model->where('o.status', 0) ->where('o.pay_status', 0) ->order('o.id desc') ->paginate(); //分页查询
$data = $list->toArray(); //获取分页查询结果集合并将结果集合转换为数组(包含分页信息)