站三界导航
首页 TP代码ThinkPHP5实用的数据库操作方法

ThinkPHP5实用的数据库操作方法

  • TP代码
  • 来源:站三界导航
  • 176阅读
  • 2022-05-21

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();     //获取分页查询结果集合并将结果集合转换为数组(包含分页信息)

本文结束
本文来自投稿,不代表站三界导航立场,如若转载,请注明出处:https://www.zhansanjie.com/article/details/8393.html

版权声明:

1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

2、本站仅提供信息发布平台,不承担相关法律责任。

3、若侵犯您的版权或隐私,请联系本站管理员删除。

4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。

分享
相关文章 更多 >>
随机网站 更多 >>
最新小程序 更多>>
最新公众号更多>>
站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。