老莫的笔记本  
  
查看: 1021|回复: 0

TP5 数据库与模型-查询构造器 CRUD

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-8-12 17:41:25 | 显示全部楼层 |阅读模式
1.查询构造器的工作原理?    在查询构造器中,分为 查询类与生成类,生成类不可被外部调用,查询类调用生成类生成SQL语句,然后丢给 连接类 进行操作, 返回一个结果集 或者受影响的条数;

   【所以重点在查询类】

2.什么是链式操作?为什么要用链式操作?
    【链式操作的功能和目的就是快速生成查询条件】


3.数据表的查询条件是如何生成的?
两个方法----3.1.1  where():AND条件
                    3.1.2  whereOr():OP条件

3种格式---- 3.2.1 where('字段名','表达式','查询条件')
                   3.2.2 where(['字段名'=>['表达式','查询条件'],…………])
                   3.2.3 where(function($quwey){//链式查询语句;})


4.如何用查询构造器实现数据表的增删改查?【curd 操作 】


    4.1 新增------1. insert(['字段']=>'值'])       2. insertAll(['二维数组'])
    4.2 更新------1. update(['字段'=>'值'])      2. setinc/setDec('字段',步长)
    4.3 读取------1. find(主键)        2. select(主键)   3.value('字段') //查询一个值    4.column('字段') // 查询一个列
    4.4 删除------1. delete(主键)    2. delete(true)   

来来来 贴代码拉  1234 都贴这里
  1. <?php
  2. namespace app\articles\controller;
  3. use think\Db;
  4. class Dbc
  5. {
  6.     public function mc1()
  7.     {
  8.         return '进来了mc1    }
  9.     public function mc2()
  10.     {
  11.         //  1. Db::table 用来选择数据表  返回的是一个 query对象
  12.         //   2. 调用下一个方法 where   查询条件
  13.         //   3. 调用 find()   该方法不是链式方法 只用于输入  但是上面两个是链式方法
  14.         
  15.         dump(
  16.             Db::table('staff')
  17.             ->where('id',4)
  18.             ->find()         //这个find() 只能查询到一条结果
  19.         );
  20.     }
  21.       public function mc3()
  22.     {
  23.         // 改一下 where 参数试试
  24.         dump(
  25.             Db::table('staff')
  26.             ->where('id','<',4)       // 中间不输入 默认是 =
  27.             ->select()              //这个 select 可以查询到很多条结果
  28.         );
  29.     }
  30.       public function mc4()
  31.     {
  32.         // 改一下 where 参数试试 这次传入输入
  33.         dump(
  34.             Db::table('staff')
  35.             ->where([
  36.                 'id'=>['<',5],
  37.                 'gongzi' =>['>',3000]
  38.                 ])
  39.             ->select()              //这个 select 可以查询到很多条结果
  40.         );
  41.     }
  42.     // 闭包调用
  43.     public function mc5()
  44.     {
  45.         dump(
  46.             Db::table('staff')
  47.             ->where(
  48.                 function ($query){
  49.                     $query->where('id','<',5)
  50.                     ->where('gongzi','>',5000);
  51.                 }
  52.             )
  53.             ->select()
  54.         );
  55.     }
  56.     // 楼上闭包函数的改写
  57.     public function mc6()
  58.     {
  59.         dump(
  60.             Db::select(
  61.                 function ($query)
  62.                 {
  63.                     $query->table('staff')              //因为$query  可以调用所有的表
  64.                     ->field(['name'=>'姓名','juese'=>'职位','gongzi'=>'工资'])       //指定查询条件
  65.                     ->where([
  66.                         'id'=>['<',6],
  67.                         'gongzi'=>['>',3000]
  68.                     ]);
  69.                 }
  70.             )
  71.         );
  72.     }
  73.     // 这是引入变量的查法
  74.     // http://localhost/public/index.php/articles/dbc/mc7/lma/5000
  75.      public function mc7($lma)
  76.     {
  77.         dump(
  78.             Db::select(
  79.                 function ($query) use($lma)
  80.                 {
  81.                     $query->table('staff')              //因为$query  可以调用所有的表
  82.                     ->field(['name'=>'姓名','juese'=>'职位','gongzi'=>'工资'])       //指定查询条件
  83.                     ->where([
  84.                         'id'=>['<',6],
  85.                         'gongzi'=>['>',$lma]
  86.                     ]);
  87.                 }
  88.             )
  89.         );
  90.     }
  91.     //上面的是使用构造器查询, 现在使用构造器添加
  92.     public function mc8()
  93.     {
  94.         $lma =  Db::table('staff')
  95.                 ->insert([
  96.                     'name'=>'小顾',
  97.                     'age'=>19,
  98.                     'gongzi'=>7500,
  99.                     'juese'=>'高级程序猿'
  100.                 ]);
  101.         return $lma?'成功添加了'.$lma.'条记录':'添加失败    }   
  102.     // 利用查询构造器实现批量添加
  103.     public function mc9()
  104.     {
  105.         $lma =  Db::table('staff')
  106.                 ->insertAll([
  107.                     ['name'=>'小顾','age'=>19,'gongzi'=>3500,'juese'=>'学徒'],
  108.                     ['name'=>'小顾1','age'=>19,'gongzi'=>2500,'juese'=>'学徒'],
  109.                     ['name'=>'小顾2','age'=>19,'gongzi'=>2500,'juese'=>'学徒'],
  110.                 ]);
  111.         return $lma?'成功添加了'.$lma.'条记录':'添加失败    }   
  112.     //利用查询构造器更新一条记录
  113.      public function mc10()
  114.     {
  115.         $lma =  Db::table('staff')
  116.                 ->update([
  117.                     'id'=>9,           //必须要有个更新条件 例如这个主键
  118.                     'name'=>'金',
  119.                 ]);
  120.         return $lma?'成功更新了'.$lma.'条记录':'更新失败    }   
  121.     //  改写上述 10 的语句 把 查询条件提出来
  122.     public function mc12()
  123.     {
  124.         $lma =  Db::table('staff')
  125.                 ->where('id',9)  //将值单独提出来
  126.                 ->update([
  127.                     'name'=>'金老大',
  128.                 ]);
  129.         return $lma?'成功更新了'.$lma.'条记录':'更新失败    }   
  130.     //  查询构造器中的自增   【备注 自增自减可以延迟操作 这样写 setInc('gongzi',100,3) 表示三秒后操作,据说可以缓解数据库性能】
  131.     public function mc13()
  132.     {
  133.         $lma = Db::table('staff')
  134.             ->where('id',2)
  135.             ->setInc('gongzi',100);        // 自增 第一个是字段,第二个是自增的值
  136.         
  137.         return $lma?'成功昂工资加了100':'工资没变';
  138.     }
  139.     //  查询构造器中的自减
  140.      public function mc14()
  141.     {
  142.         $lma = Db::table('staff')
  143.             ->where('id',2)
  144.             ->setDec('gongzi',200);        // 自增 第一个是字段,第二个是自增的值
  145.         
  146.         return $lma?'因为你迷住了本程序猿我要扣你工资200块':'还是不忍心扣啊';
  147.     }
  148.     // 查询构造器中的查询 【这货神经,明明没写出 value  只说了 find() 和 select ,这居然将value】
  149.     public function mc15()
  150.     {
  151.         //value 字段 默认值
  152.         $lma = Db::table('staff')
  153.                 ->where('id',9)
  154.                 ->value('name');
  155.         return '查询到的结果为'.$lma;
  156.     }
  157.     // 同样是查询构造器中的查询 这次用column('字段','字段')  输出一列 类似select
  158.     public function mc16()
  159.     {
  160.         //value 字段 默认值
  161.         $lma = Db::table('staff')
  162.                 ->where('id','>',5)
  163.                 ->column('name');      
  164.                  // 我试了一下 如果还用value 那么只能有一个值
  165.                  // 如果用 select('name');        得到的是空
  166.                  //  如果是 return  结果居然报错——因为结果是个数组
  167.                 // 如果是 column('name','age') 输出的结果 任然是数组 但是 数组的键是 name ,值是age
  168.         // return '查询到的结果为'.$lma;
  169.         dump($lma);
  170.     }
  171.     //查询构造器中的删除
  172.     public function mc17()
  173.     {
  174.         //    $lma = Db::table('staff')
  175.         //        ->where('id',10)
  176.         //        ->delete();    // 这是我设想中写法  其实不用这么写 delete 可以直接删除主键
  177.         $lma = Db::table('staff')
  178.             ->delete(11);           // 直接写入主键的值
  179.              //  也可以一次删除多条  但是必须写条件
  180.              //  deletc([10,11]) ;  这是多条删除的写法
  181.              //  清空表 啥都没有的写法 ->   delete(true);
  182.         return $lma?'成功辞退了小顾2':'小顾2私活赖着不走';
  183.     }
  184. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表