0
点赞
收藏
分享

微信扫一扫

ThinkPHP6.0 入门【五】,数据库新增,删,该,查询表达式

小编 2022-04-03 阅读 29

       本学习课程以学习为目的一周三篇持续更新,学习代码更新在码云公开仓库,不足之处欢迎朋友们前来指导,写作不易请多多支持,本人创作新手写的不好,不喜勿喷,谢谢大家。

学习目标

  1. 数据新增
  2. 批量数据新增
  3. save()新增
  4. 数据修改
  5. 数据删除
  6. 比较查询
  7. 模糊查询
  8. exp查询

一.数据新增

码云提交编号:e7ccc4dfb80d1664238a323cff7023bd04a5e808

  1.  使用 insert()方法可以向数据表添加一条数据
  2. 如果新增成功,insert()方法会返回一个 1 值,即受影响行数
    public function insert(){
            $data = [
                'username'   => '反贼唐三8888',
                'password'   => 'e10adc3949ba59abbe56e057f20f883e',
                'gender'     => '1',
                'email'      => '123@qq.com',
                'remarks'    => '老铁66',
                'status'     => 0,
                'delete_time'=> null,
                'create_time'=> '2022-03-23 20:09:27',
                'update_time'=> '2022-03-23 20:09:27'
            ];
            return Db::name('user')->insert($data);
    
        }

  3. 如果你添加一个不存在的字段数据,会抛出一个异常 Exception                                               

    'create_time2'=> '2022-03-23 20:09:27',

  4. 如果想强行新增抛弃不存在的字段数据,则使用 strict(false) 方法,忽略异常

    return Db::name('user')->strict(false)->insert($data);

  5. 如果我们采用的数据库是 mysql ,可以支持 replace 写入,  insert replace 写入的区别在于,前者表示表中存在主键相同则报错,后者则修改,我们对比一下他们sql语句的区别

    //        Db::name('user')->insert($data);
            Db::name('user')->replace()->insert($data);
            return Db::getLastSql();

    我们对比一下他们sql语句的区别

    INSERT INTO  `tp_user` SET `username` = '反贼唐三8888' , `password` = 'e10adc3949ba59abbe56e057f20f883e' , `gender` = '1' , `email` = '123@qq.com' , `remarks` = '老铁66' , `status` = 0 , `delete_time` = NULL , `create_time` = '2022-03-23 20:09:27' , `update_time` = '2022-03-23 20:09:27'
    
    REPLACE INTO `tp_user` SET `username` = '反贼唐三8888' , `password` = 'e10adc3949ba59abbe56e057f20f883e' , `gender` = '1' , `email` = '123@qq.com' , `remarks` = '老铁66' , `status` = 0 , `delete_time` = NULL , `create_time` = '2022-03-23 20:09:27' , `update_time` = '2022-03-23 20:09:27'

  6. 使用 insertGetId()方法,可以在新增成功后返回当前数据 ID
    return Db::name('user')->insertGetId($data);

二. 批量数据新增

  1. 使用 insertAll()方法,可以批量新增数据,但要保持数组结构一致
            $data2 =[[
                'username'   => '苍老师',
                'password'   => 'e10adc3949ba59abbe56e057f20f883e',
                'gender'     => '1',
                'email'      => '123@qq.com',
                'remarks'    => '老铁66',
                'status'     => 0,
                'delete_time'=> null,
                'create_time'=> '2022-03-23 20:09:27',
    //            'create_time2'=> '2022-03-23 20:09:27',//一个不存在的字段
                'update_time'=> '2022-03-23 20:09:27'
            ],[
                'username'   => '李老师',
                'password'   => 'e10adc3949ba59abbe56e057f20f883e',
                'gender'     => '1',
                'email'      => '123@qq.com',
                'remarks'    => '老铁66',
                'status'     => 0,
                'delete_time'=> null,
                'create_time'=> '2022-03-23 20:09:27',
    //            'create_time2'=> '2022-03-23 20:09:27',//一个不存在的字段
                'update_time'=> '2022-03-23 20:09:27'
            ],[
                'username'   => '波老师',
                'password'   => 'e10adc3949ba59abbe56e057f20f883e',
                'gender'     => '1',
                'email'      => '123@qq.com',
                'remarks'    => '老铁66',
                'status'     => 0,
                'delete_time'=> null,
                'create_time'=> '2022-03-23 20:09:27',
    //            'create_time2'=> '2022-03-23 20:09:27',//一个不存在的字段
                'update_time'=> '2022-03-23 20:09:27'
            ]] ;
            Db::name('user')->insertAll($data2);
    

  2. 批量新增也支持 replace()方法,添加后改变成 replace into
    Db::name('user')->replace()->insertAll($data2);

三. save增数据

  1. save()方法是一个通用方法,可以自行判断是新增还是修改(更新)数据,方法判断是否为新增或修改的依据为,是否存在主键,不存在即新增
    Db::name('user')->save($data)

四.数据修改

码云提交编号:00393b2b6d8404c3b3a324dfb9649c56ab7400a1

  1. 使用 update()方法来修改数据,修改成功返回影响行数,没有修改返回 0
    $data = [ 'username' => '小王子' ];
            return Db::name('user')->where('id', 17)->update($data);
  2. 如果修改数据包含了主键信息,比如 id,那么可以省略掉 where 条件
    $data = [
                'id'       =>18,
                'username' => '小王子'
            ];
            return Db::name('user')->update($data);
  3. 如果想让一些字段修改时执行 SQL 函数操作,可以使用 exp()方法实现
    $data = [
                'id'       =>19,
                'remarks' => 'Tony'
            ];
            return Db::name('user')->exp('username', 'UPPER(username)')->update($data);

  4. 如果要自增 / 自减某个字段,可以使用 inc/dec 方法,并支持自定义步长

            Db::name('user')
                ->where('id', 19)
                ->inc('gender')
                ->dec('status', 2)
                ->update();
    

  5. 一个更加简单粗暴灵活的方式,使用 ::raw() 方法实现 3 4 点的内容

            Db::name('user')->where('id', 17)->update(
                [
                'username'  => Db::raw('UPPER(username)'),
                'gender'    => Db::raw('gender + 1'),
                'status'    => Db::raw('status - 2')]
            );
    

  6. 使用 save()方法进行修改数据,这里必须指定主键才能实现修改功能
    Db::name('user')->where('id', 20) ->save(['username'=>'猴面包树']);

五.数据删除 

  1. 极简删除可以根据主键直接删除,删除成功返回影响行数,否则 0
    return Db::name('user')->delete(49);
  2. 根据主键,还可以删除多条记录
    return Db::name('user')->delete([48,47,46]);
  3. 正常情况下,通过 where()方法来删除
    return Db::name('user')->where('id', 45)->delete();
  4. 通过 true 参数删除数据表所有数据,我已经试过了,现在就不试了
    return Db::name('user')->delete(true);

六.比较查询

码云提交编号:f4eeaa524bd75c359eba5f787112736d452a334e

  1. 查询表达式支持大部分常用的 SQL 语句,语法格式如下:

  2. 在查询数据进行筛选时,我们采用 where() 方法,比如 id=250

    $data=  Db::name('user')->where('id', 20)->find();
    return json($data);
    
    $data=  Db::name('user')->where('id','=', 20)->find();
    return json($data);
    

  3. 使用 <> > < >= <= 可以筛选出各种符合比较值的数据列表

    $data=  Db::name('user')->where('id','<>', 20)->select();
    return json($data);
    
    $data=  Db::name('user')->where('id','>', 20)->select();
    return json($data);
    
    $data=  Db::name('user')->where('id','<', 20)->select();
    return json($data);
    
    $data=  Db::name('user')->where('id','>=', 20)->select();
    return json($data);
    
    $data=  Db::name('user')->where('id','<=', 20)->select();
    return json($data);
    

七.模糊查询

  1. 使用 like 表达式进行模糊查询
     $data =  Db::name('user')->where('username','like','t%')->select();
           return json($data);
  2. like 表达式还可以支持数组传递进行模糊查询
    $data =  Db::name('user')->where('username','like',['李%','张%','赵%']')->select();
    return json($data);
     
    $data =  Db::name('user')->where('username','like',['李%','张%','赵%'],'or')->select();
    return json($data);
    SELECT * FROM `tp_user` WHERE (`username` LIKE '李%' AND `username` LIKE '张%' AND `username` LIKE '赵%')
    SELECT * FROM `tp_user` WHERE (`username` LIKE '李%' OR `username` LIKE '张%' OR `username` LIKE '赵%')
    

  3. like 表达式具有两个快捷方式 whereLike()取正whereNoLike()取反
    $data =  Db::name('user')->whereLike('username','李%')->select();
    return json($data);
    $data =  Db::name('user')->whereNotLike('username','李%')->select();
    return json($data);

  4. like 表达式的两个快捷方式 whereLike()和 whereNoLike()也可以支持数组传递进行模糊查询
  5. between 表达式具也有两个快捷方式 whereBetween() whereNotBetween()

    $data =  Db::name('user')->whereBetween('id','10,15')->select();
    return json($data);
    

     

  6. in 表达式具有两个快捷方式 whereIn() 和 whereNotIn()

    $data =  Db::name('user')->whereIn('id','10,12,14')->select();
    return json($data);

     

  7. null 表达式具有两个快捷方式 whereNull() whereNotNull()

 

八.exp查询

  1. 使用 exp 可以自定义字段后的 SQL 语句
  2. 如果上面那些表达式都无法满足你的查询要求你就可以使用exp自定义拼装查询

举报

相关推荐

0 条评论